avoid data race access to uploadReaderToChunks.uploadErr (#3550)

avoid data race access to uploadErr
https://github.com/seaweedfs/seaweedfs/issues/3549
This commit is contained in:
Konstantin Lebedev 2022-08-30 12:03:01 +05:00 committed by GitHub
parent 903a06a160
commit 105702ebe0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -52,6 +52,7 @@ func (fs *FilerServer) uploadReaderToChunks(w http.ResponseWriter, r *http.Reque
var bytesBufferCounter int64
bytesBufferLimitCond := sync.NewCond(new(sync.Mutex))
var fileChunksLock sync.Mutex
var uploadErrLock sync.Mutex
for {
// need to throttle used byte buffer
@ -77,7 +78,9 @@ func (fs *FilerServer) uploadReaderToChunks(w http.ResponseWriter, r *http.Reque
bufPool.Put(bytesBuffer)
atomic.AddInt64(&bytesBufferCounter, -1)
bytesBufferLimitCond.Signal()
uploadErrLock.Lock()
uploadErr = err
uploadErrLock.Unlock()
break
}
if chunkOffset == 0 && !isAppend {
@ -105,8 +108,12 @@ func (fs *FilerServer) uploadReaderToChunks(w http.ResponseWriter, r *http.Reque
}()
chunk, toChunkErr := fs.dataToChunk(fileName, contentType, bytesBuffer.Bytes(), offset, so)
if uploadErr == nil && toChunkErr != nil {
uploadErr = toChunkErr
if toChunkErr != nil {
uploadErrLock.Lock()
if uploadErr == nil {
uploadErr = toChunkErr
}
uploadErrLock.Unlock()
}
if chunk != nil {
fileChunksLock.Lock()