+ leftPiece := &p.pieceStates[leftPieceIndex]
+ rightPiece := &p.pieceStates[rightPieceIndex]
+ // Putting this first means we can steal requests from lesser-performing peers for our first few
+ // new requests.
+ priority := func() piecePriority {
+ // Technically we would be happy with the cached priority here, except we don't actually
+ // cache it anymore, and Torrent.piecePriority just does another lookup of *Piece to resolve
+ // the priority through Piece.purePriority, which is probably slower.
+ leftPriority := leftPiece.Priority
+ rightPriority := rightPiece.Priority
+ ml = ml.Int(
+ -int(leftPriority),
+ -int(rightPriority),
+ )
+ if !ml.Ok() {
+ if leftPriority != rightPriority {
+ panic("expected equal")
+ }
+ }
+ return leftPriority
+ }()
+ if ml.Ok() {
+ return ml.MustLess()
+ }
+ leftRequestState := t.requestState[leftRequest]
+ rightRequestState := t.requestState[rightRequest]
+ leftPeer := leftRequestState.peer
+ rightPeer := rightRequestState.peer
+ // Prefer chunks already requested from this peer.