Browse Source

mount: avoid "send on closed channel"

pull/1547/head
Chris Lu 4 years ago
parent
commit
09bab17aff
  1. 6
      weed/filesys/dirty_page.go
  2. 1
      weed/filesys/filehandle.go

6
weed/filesys/dirty_page.go

@ -14,6 +14,7 @@ type ContinuousDirtyPages struct {
f *File f *File
writeWaitGroup sync.WaitGroup writeWaitGroup sync.WaitGroup
chunkSaveErrChan chan error chunkSaveErrChan chan error
chunkSaveErrChanClosed bool
lock sync.Mutex lock sync.Mutex
collection string collection string
replication string replication string
@ -82,6 +83,11 @@ func (pages *ContinuousDirtyPages) saveExistingLargestPageToStorage() (hasSavedD
func (pages *ContinuousDirtyPages) saveToStorage(reader io.Reader, offset int64, size int64) { func (pages *ContinuousDirtyPages) saveToStorage(reader io.Reader, offset int64, size int64) {
if pages.chunkSaveErrChanClosed {
pages.chunkSaveErrChan = make(chan error, 8)
pages.chunkSaveErrChanClosed = false
}
mtime := time.Now().UnixNano() mtime := time.Now().UnixNano()
pages.writeWaitGroup.Add(1) pages.writeWaitGroup.Add(1)
go func() { go func() {

1
weed/filesys/filehandle.go

@ -186,6 +186,7 @@ func (fh *FileHandle) Release(ctx context.Context, req *fuse.ReleaseRequest) err
} }
// stop the goroutine // stop the goroutine
fh.dirtyPages.chunkSaveErrChanClosed = true
close(fh.dirtyPages.chunkSaveErrChan) close(fh.dirtyPages.chunkSaveErrChan)
return nil return nil

Loading…
Cancel
Save