]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Trigger piece request order changes on connections in a few spots
authorMatt Joiner <anacrolix@gmail.com>
Thu, 11 Feb 2016 06:57:57 +0000 (17:57 +1100)
committerMatt Joiner <anacrolix@gmail.com>
Thu, 11 Feb 2016 06:57:57 +0000 (17:57 +1100)
The client was requesting already obtained data in certain circumstances. This fixes it.

client.go
torrent.go

index 663d1a01319ab1e1912a8b3c3ebb90491f12ac45..6d86c41af4e30b18724eefbc1d2082b40f3e7954 100644 (file)
--- a/client.go
+++ b/client.go
@@ -2497,7 +2497,9 @@ func (me *Client) pieceChanged(t *torrent, piece int) {
        } else {
                me.onFailedPiece(t, piece)
        }
-       t.updatePiecePriority(piece)
+       if t.updatePiecePriority(piece) {
+               t.piecePriorityChanged(piece)
+       }
        t.publishPieceChange(piece)
 }
 
index 01bc9005f4e98336a5dc539af953c25c1e0c6783..c8e5e5ba3d351256d0e54432333940b0a264183b 100644 (file)
@@ -860,6 +860,8 @@ func (t *torrent) updatePiecePriority(piece int) bool {
        return true
 }
 
+// Update all piece priorities in one hit. This function should have the same
+// output as updatePiecePriority, but across all pieces.
 func (t *torrent) updatePiecePriorities() {
        newPrios := make([]piecePriority, t.numPieces())
        t.pendingPieces.IterTyped(func(piece int) (more bool) {
@@ -875,8 +877,10 @@ func (t *torrent) updatePiecePriorities() {
                }
                return true
        })
-       // TODO: Do I need a pass suppressing stuff that we already have?
        for i, prio := range newPrios {
+               if t.pieceComplete(i) {
+                       prio = PiecePriorityNone
+               }
                if prio != t.Pieces[i].priority {
                        t.Pieces[i].priority = prio
                        t.piecePriorityChanged(i)