mount: fix racing conditions

prevent wrong reading when the SingleChunkCacher is started, but not finished yet
This commit is contained in:
chrislu 2022-07-08 00:29:39 -07:00
parent a85ed3fe8f
commit 28add5a534

View file

@ -19,6 +19,7 @@ type ReaderCache struct {
type SingleChunkCacher struct {
sync.RWMutex
cond *sync.Cond
parent *ReaderCache
chunkFileId string
data []byte
@ -140,6 +141,7 @@ func newSingleChunkCacher(parent *ReaderCache, fileId string, cipherKey []byte,
chunkSize: chunkSize,
shouldCache: shouldCache,
}
t.cond = sync.NewCond(t)
return t
}
@ -168,6 +170,7 @@ func (s *SingleChunkCacher) startCaching() {
if s.shouldCache {
s.parent.chunkCache.SetChunk(s.chunkFileId, s.data)
}
s.cond.Broadcast()
return
}
@ -183,6 +186,10 @@ func (s *SingleChunkCacher) readChunkAt(buf []byte, offset int64) (int, error) {
s.RLock()
defer s.RUnlock()
for s.completedTime.IsZero() {
s.cond.Wait()
}
if s.err != nil {
return 0, s.err
}