piece.go | 4 +++- torrent.go | 8 ++------ diff --git a/piece.go b/piece.go index 3ca674d0731af2348476813cf233cce23f42b2c3..c65ba9a0020407c64e92919f98019708c7f894e3 100644 --- a/piece.go +++ b/piece.go @@ -212,6 +212,7 @@ p.priority = prio p.t.updatePiecePriority(p.index, "Piece.SetPriority") } +// This is priority based only on piece, file and reader priorities. func (p *Piece) purePriority() (ret PiecePriority) { for _, f := range p.files { ret.Raise(f.prio) @@ -233,7 +234,8 @@ func (p *Piece) ignoreForRequests() bool { return p.hashing || p.marking || !p.haveHash() || p.t.pieceComplete(p.index) || p.queuedForHash() } -func (p *Piece) uncachedPriority() (ret piecePriority) { +// This is the priority adjusted for piece state like completion, hashing etc. +func (p *Piece) effectivePriority() (ret PiecePriority) { if p.ignoreForRequests() { return PiecePriorityNone } diff --git a/torrent.go b/torrent.go index fe1a19722eb0b1003ff8e1db1ab06b8349ecb8c1..d1f4a646838f0b4c480ca38913720432d0d8cac5 100644 --- a/torrent.go +++ b/torrent.go @@ -685,7 +685,7 @@ } func (t *Torrent) pieceState(index pieceIndex) (ret PieceState) { p := &t.pieces[index] - ret.Priority = t.piecePriority(index) + ret.Priority = p.effectivePriority() ret.Completion = p.completion() ret.QueuedForHash = p.queuedForHash() ret.Hashing = p.hashing @@ -1420,7 +1420,7 @@ // request order. t.updatePieceRequestOrderPiece(piece) } p := t.piece(piece) - newPrio := p.uncachedPriority() + newPrio := p.effectivePriority() // t.logger.Printf("torrent %p: piece %d: uncached priority: %v", t, piece, newPrio) if newPrio == PiecePriorityNone && p.haveHash() { return t._pendingPieces.CheckedRemove(uint32(piece)) @@ -1482,10 +1482,6 @@ return false } } return true -} - -func (t *Torrent) piecePriority(piece pieceIndex) piecePriority { - return t.piece(piece).uncachedPriority() } func (t *Torrent) pendRequest(req RequestIndex) {