aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorchrislu <chris.lu@gmail.com>2023-08-20 11:22:44 -0700
committerchrislu <chris.lu@gmail.com>2023-08-20 12:13:06 -0700
commit3e9c32a3f0e20bb1663aa3326c4e1d50f44f66c4 (patch)
tree866010d370d7811e5920f5f75463640e9738fe31
parent1e72579ac7d9dfb4968e8025cd8c715feeecbb5e (diff)
downloadseaweedfs-3e9c32a3f0e20bb1663aa3326c4e1d50f44f66c4.tar.xz
seaweedfs-3e9c32a3f0e20bb1663aa3326c4e1d50f44f66c4.zip
refactoring to use atomic bool
fix compilation
-rw-r--r--weed/util/log_buffer/log_buffer.go16
1 files changed, 6 insertions, 10 deletions
diff --git a/weed/util/log_buffer/log_buffer.go b/weed/util/log_buffer/log_buffer.go
index 2d12a5bf2..bd124908e 100644
--- a/weed/util/log_buffer/log_buffer.go
+++ b/weed/util/log_buffer/log_buffer.go
@@ -3,6 +3,7 @@ package log_buffer
import (
"bytes"
"sync"
+ "sync/atomic"
"time"
"google.golang.org/protobuf/proto"
@@ -34,7 +35,7 @@ type LogBuffer struct {
flushInterval time.Duration
flushFn func(startTime, stopTime time.Time, buf []byte)
notifyFn func()
- isStopping bool
+ isStopping *atomic.Bool
flushChan chan *dataToFlush
lastTsNs int64
sync.RWMutex
@@ -50,6 +51,7 @@ func NewLogBuffer(name string, flushInterval time.Duration, flushFn func(startTi
flushFn: flushFn,
notifyFn: notifyFn,
flushChan: make(chan *dataToFlush, 256),
+ isStopping: new(atomic.Bool),
}
go lb.loopFlush()
go lb.loopInterval()
@@ -119,20 +121,14 @@ func (m *LogBuffer) AddToBuffer(partitionKey, data []byte, processingTsNs int64)
}
func (m *LogBuffer) IsStopping() bool {
- m.RLock()
- defer m.RUnlock()
-
- return m.isStopping
+ return m.isStopping.Load()
}
func (m *LogBuffer) Shutdown() {
- m.Lock()
- defer m.Unlock()
-
- if m.isStopping {
+ isAlreadyStopped := m.isStopping.Swap(true)
+ if isAlreadyStopped {
return
}
- m.isStopping = true
toFlush := m.copyToFlush()
m.flushChan <- toFlush
close(m.flushChan)