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)
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
}
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
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))
return true
}
-func (t *Torrent) piecePriority(piece pieceIndex) piecePriority {
- return t.piece(piece).uncachedPriority()
-}
-
func (t *Torrent) pendRequest(req RequestIndex) {
t.piece(t.pieceIndexOfRequestIndex(req)).pendChunkIndex(req % t.chunksPerRegularPiece())
}