]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Apply smart bans under Client lock
authorMatt Joiner <anacrolix@gmail.com>
Thu, 13 Jan 2022 03:04:02 +0000 (14:04 +1100)
committerMatt Joiner <anacrolix@gmail.com>
Sat, 22 Jan 2022 07:43:04 +0000 (18:43 +1100)
torrent.go

index a70bbd7df1869998b742fddbef606a452e6f867c..688ca3f80d8a5a241eb59b3a0efc583da1e9b59f 100644 (file)
@@ -2155,13 +2155,6 @@ func (t *Torrent) pieceHasher(index pieceIndex) {
        p := t.piece(index)
        sum, failedPeers, copyErr := t.hashPiece(index)
        correct := sum == *p.hash
-       if correct {
-               for peer := range failedPeers {
-                       t.cl.banPeerIP(peer.AsSlice())
-                       log.Printf("smart banned %v for piece %v", peer, index)
-               }
-               t.dropBannedPeers()
-       }
        switch copyErr {
        case nil, io.EOF:
        default:
@@ -2170,6 +2163,13 @@ func (t *Torrent) pieceHasher(index pieceIndex) {
        t.storageLock.RUnlock()
        t.cl.lock()
        defer t.cl.unlock()
+       if correct {
+               for peer := range failedPeers {
+                       t.cl.banPeerIP(peer.AsSlice())
+                       log.Printf("smart banned %v for piece %v", peer, index)
+               }
+               t.dropBannedPeers()
+       }
        p.hashing = false
        t.pieceHashed(index, correct, copyErr)
        t.updatePiecePriority(index, "Torrent.pieceHasher")