fix bug with mutex lock in some threads

This commit is contained in:
YouROK
2020-12-16 17:01:23 +03:00
parent 706c1c6bdf
commit e3c02b7258

View File

@@ -23,7 +23,7 @@ type Reader struct {
muPreload sync.Mutex muPreload sync.Mutex
} }
func NewReader(file *torrent.File, cache *Cache) *Reader { func newReader(file *torrent.File, cache *Cache) *Reader {
r := new(Reader) r := new(Reader)
r.file = file r.file = file
r.Reader = file.NewReader() r.Reader = file.NewReader()
@@ -89,16 +89,11 @@ func (r *Reader) Close() error {
r.mu.Lock() r.mu.Lock()
defer r.mu.Unlock() defer r.mu.Unlock()
r.isClosed = true r.isClosed = true
r.cache.muReaders.Lock()
delete(r.cache.readers, r)
r.cache.muReaders.Unlock()
return r.Reader.Close() return r.Reader.Close()
} }
func (c *Cache) NewReader(file *torrent.File) *Reader { func (c *Cache) NewReader(file *torrent.File) *Reader {
return NewReader(file, c) return newReader(file, c)
} }
func (c *Cache) Readers() int { func (c *Cache) Readers() int {
@@ -112,3 +107,10 @@ func (c *Cache) Readers() int {
} }
return len(c.readers) return len(c.readers)
} }
func (c *Cache) CloseReader(r *Reader) {
r.cache.muReaders.Lock()
r.Close()
delete(r.cache.readers, r)
r.cache.muReaders.Unlock()
}