client.go | 2 +- torrent.go | 7 ++++++- diff --git a/client.go b/client.go index 00c2e27b5284d217cbc2d64e97255ebd125519e0..751fb45ddbc16d55bdc04e5afd746340e63edb63 100644 --- a/client.go +++ b/client.go @@ -2293,7 +2293,7 @@ if err != nil { log.Printf("%s: error writing chunk %v: %s", t, req, err) t.pendRequest(req) - // t.updatePiecePriority(msg.Index) + t.updatePieceCompletion(int(msg.Index)) return } diff --git a/torrent.go b/torrent.go index a7aa57e0d65cc88e22244cd4e0da5448b4be29d0..a3769cbcdd237dc6b65f38c54298d3180dfc5770 100644 --- a/torrent.go +++ b/torrent.go @@ -1025,7 +1025,12 @@ pieceInclinationsPut.Add(1) } func (t *torrent) updatePieceCompletion(piece int) { - t.completedPieces.Set(piece, t.pieceCompleteUncached(piece)) + pcu := t.pieceCompleteUncached(piece) + changed := t.completedPieces.Get(piece) != pcu + t.completedPieces.Set(piece, pcu) + if changed { + t.pieceChanged(piece) + } } // Non-blocking read. Client lock is not required.