diff options
| author | Viktor Kuzmin <kvaster@gmail.com> | 2023-11-17 16:45:39 +0200 |
|---|---|---|
| committer | Chris Lu <chrislusf@users.noreply.github.com> | 2023-11-17 07:38:14 -0800 |
| commit | 06e723f6295726de5a4fdc18929e50d1a4898029 (patch) | |
| tree | 31eafbc00feaa39469f35500c60b728805506d6f | |
| parent | 2b229e98cee862b66f9aa988e53da6b1ec79d716 (diff) | |
| download | seaweedfs-06e723f6295726de5a4fdc18929e50d1a4898029.tar.xz seaweedfs-06e723f6295726de5a4fdc18929e50d1a4898029.zip | |
Waiting for writes to complete with acquired locks may lead to deadlock, fixes #4952
| -rw-r--r-- | weed/mount/page_writer/upload_pipeline.go | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/weed/mount/page_writer/upload_pipeline.go b/weed/mount/page_writer/upload_pipeline.go index 267ea3a4c..bd7fc99dd 100644 --- a/weed/mount/page_writer/upload_pipeline.go +++ b/weed/mount/page_writer/upload_pipeline.go @@ -147,14 +147,17 @@ func (up *UploadPipeline) MaybeReadDataAt(p []byte, off int64, tsNs int64) (maxS } func (up *UploadPipeline) FlushAll() { + up.flushChunks() + up.waitForCurrentWritersToComplete() +} + +func (up *UploadPipeline) flushChunks() { up.chunksLock.Lock() defer up.chunksLock.Unlock() for logicChunkIndex, memChunk := range up.writableChunks { up.moveToSealed(memChunk, logicChunkIndex) } - - up.waitForCurrentWritersToComplete() } func (up *UploadPipeline) maybeMoveToSealed(memChunk PageChunk, logicChunkIndex LogicChunkIndex) { |
