aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--weed/server/filer_server_handlers_write_upload.go11
1 files changed, 9 insertions, 2 deletions
diff --git a/weed/server/filer_server_handlers_write_upload.go b/weed/server/filer_server_handlers_write_upload.go
index 7756b5d59..1a7449670 100644
--- a/weed/server/filer_server_handlers_write_upload.go
+++ b/weed/server/filer_server_handlers_write_upload.go
@@ -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()