mirror of
https://github.com/Ernous/TorrServerJellyfin.git
synced 2025-12-19 13:36:09 +05:00
fix reload pieces in unused reader
This commit is contained in:
@@ -215,8 +215,11 @@ func (c *Cache) getRemPieces() []*Piece {
|
||||
ranges := make([]Range, 0)
|
||||
c.muReaders.Lock()
|
||||
for r, _ := range c.readers {
|
||||
r.checkReader()
|
||||
if r.isUse {
|
||||
ranges = append(ranges, r.getPiecesRange())
|
||||
}
|
||||
}
|
||||
c.muReaders.Unlock()
|
||||
ranges = mergeRange(ranges)
|
||||
|
||||
@@ -243,6 +246,9 @@ func (c *Cache) getRemPieces() []*Piece {
|
||||
|
||||
c.muReaders.Lock()
|
||||
for r, _ := range c.readers {
|
||||
if !r.isUse {
|
||||
continue
|
||||
}
|
||||
if c.isIdInFileBE(ranges, r.getReaderPiece()) {
|
||||
continue
|
||||
}
|
||||
@@ -336,8 +342,11 @@ func (c *Cache) clearPriority() {
|
||||
ranges := make([]Range, 0)
|
||||
c.muReaders.Lock()
|
||||
for r, _ := range c.readers {
|
||||
r.checkReader()
|
||||
if r.isUse {
|
||||
ranges = append(ranges, r.getPiecesRange())
|
||||
}
|
||||
}
|
||||
c.muReaders.Unlock()
|
||||
ranges = mergeRange(ranges)
|
||||
|
||||
|
||||
@@ -23,6 +23,7 @@ type Reader struct {
|
||||
|
||||
///Preload
|
||||
lastAccess int64
|
||||
isUse bool
|
||||
muPreload sync.Mutex
|
||||
ranges Range
|
||||
}
|
||||
@@ -94,7 +95,7 @@ func (r *Reader) Read(p []byte) (n int, err error) {
|
||||
}
|
||||
|
||||
func (r *Reader) SetReadahead(length int64) {
|
||||
if time.Now().Unix() > r.lastAccess+60 && r.cache != nil && len(r.cache.readers) > 1 {
|
||||
if !r.isUse && r.cache != nil {
|
||||
//fix read a head on not readed reader
|
||||
r.Reader.SetReadahead(0)
|
||||
r.readahead = 0
|
||||
@@ -143,14 +144,8 @@ func (r *Reader) getPieceNum(offset int64) int {
|
||||
}
|
||||
|
||||
func (r *Reader) getOffsetRange() (int64, int64) {
|
||||
|
||||
if time.Now().Unix() > r.lastAccess+60 && len(r.cache.readers) > 1 {
|
||||
r.SetReadahead(0)
|
||||
return r.file.Offset(), r.file.Offset()
|
||||
}
|
||||
|
||||
prc := int64(settings.BTsets.ReaderReadAHead)
|
||||
readers := int64(len(r.cache.readers))
|
||||
readers := int64(r.getUseReaders())
|
||||
if readers == 0 {
|
||||
readers = 1
|
||||
}
|
||||
@@ -167,3 +162,27 @@ func (r *Reader) getOffsetRange() (int64, int64) {
|
||||
}
|
||||
return beginOffset, endOffset
|
||||
}
|
||||
|
||||
func (r *Reader) checkReader() {
|
||||
if time.Now().Unix() > r.lastAccess+60 && len(r.cache.readers) > 1 {
|
||||
r.SetReadahead(0)
|
||||
r.isUse = false
|
||||
if r.offset > 0 {
|
||||
r.Reader.Seek(0, io.SeekStart)
|
||||
}
|
||||
} else {
|
||||
r.isUse = true
|
||||
}
|
||||
}
|
||||
|
||||
func (r *Reader) getUseReaders() int {
|
||||
readers := 1
|
||||
if r.cache != nil {
|
||||
for reader, _ := range r.cache.readers {
|
||||
if reader.isUse {
|
||||
readers++
|
||||
}
|
||||
}
|
||||
}
|
||||
return readers
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user