aboutsummaryrefslogtreecommitdiff
path: root/weed/util/log_buffer/log_read.go
diff options
context:
space:
mode:
authorM@ <m@cognusion.com>2024-04-25 18:46:12 -0400
committerGitHub <noreply@github.com>2024-04-25 15:46:12 -0700
commitabf01a0eb724aa82a5b2465c1dbde67bcc795727 (patch)
treef0a46a03459a8ff9a86f2e5880ebae79c0735c46 /weed/util/log_buffer/log_read.go
parent855607c5360c788959d8a6bfd0225a75b63dc51f (diff)
downloadseaweedfs-abf01a0eb724aa82a5b2465c1dbde67bcc795727.tar.xz
seaweedfs-abf01a0eb724aa82a5b2465c1dbde67bcc795727.zip
Fixes unlocked read from logBuffer.LastTsNs that is racey. (#5536)
Diffstat (limited to 'weed/util/log_buffer/log_read.go')
-rw-r--r--weed/util/log_buffer/log_read.go10
1 files changed, 9 insertions, 1 deletions
diff --git a/weed/util/log_buffer/log_read.go b/weed/util/log_buffer/log_read.go
index c3dd0f288..0d044fc14 100644
--- a/weed/util/log_buffer/log_read.go
+++ b/weed/util/log_buffer/log_read.go
@@ -66,9 +66,17 @@ func (logBuffer *LogBuffer) LoopProcessLogData(readerName string, startPosition
isDone = true
return
}
+ logBuffer.RLock()
lastTsNs := logBuffer.LastTsNs
- for lastTsNs == logBuffer.LastTsNs {
+ logBuffer.RUnlock()
+ loopTsNs := lastTsNs // make a copy
+
+ for lastTsNs == loopTsNs {
if waitForDataFn() {
+ // Update loopTsNs and loop again
+ logBuffer.RLock()
+ loopTsNs = logBuffer.LastTsNs
+ logBuffer.RUnlock()
continue
} else {
isDone = true