From 00d87ecb5c200d9a9ab7ccc7442a688a899faeb8 Mon Sep 17 00:00:00 2001 From: ston1th Date: Fri, 16 Sep 2022 15:39:38 +0200 Subject: [PATCH] fixed rare panic --- pkg/fs/metadata.go | 8 +++++--- pkg/provider/crypto/file.go | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/pkg/fs/metadata.go b/pkg/fs/metadata.go index 3b8b8ae..b736110 100644 --- a/pkg/fs/metadata.go +++ b/pkg/fs/metadata.go @@ -362,6 +362,10 @@ type Metadata struct { func (md *Metadata) Close() (err error) { md.mu.Lock() defer md.mu.Unlock() + return md.close() +} + +func (md *Metadata) close() (err error) { if md.wc != nil { close(md.wc) if md.done != nil { @@ -383,9 +387,7 @@ func (md *Metadata) Delete() error { md.cmu.Lock() md.Chunks = chunk.Chunks{} md.cmu.Unlock() - close(md.wc) - md.f.Close() - md.f = nil + md.close() atomic.StoreInt64(&md.Atime, now()) return md.fs.RemoveDst(md.name) } diff --git a/pkg/provider/crypto/file.go b/pkg/provider/crypto/file.go index 305d482..9cb1bff 100644 --- a/pkg/provider/crypto/file.go +++ b/pkg/provider/crypto/file.go @@ -199,7 +199,7 @@ func (f *file) WriteAt(data []byte, pos int64) (n int, err error) { w, e := c.writeAt(data[n:], woff) n += w if c.full() { - if f.w.last.cn == cn { + if f.w.last != nil && f.w.last.cn == cn { f.w.last = nil } // async flush