diff options
| author | M@ <m@cognusion.com> | 2024-04-25 18:46:12 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-04-25 15:46:12 -0700 |
| commit | abf01a0eb724aa82a5b2465c1dbde67bcc795727 (patch) | |
| tree | f0a46a03459a8ff9a86f2e5880ebae79c0735c46 /weed/util/log_buffer/log_read.go | |
| parent | 855607c5360c788959d8a6bfd0225a75b63dc51f (diff) | |
| download | seaweedfs-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.go | 10 |
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 |
