]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Mark piece complete without Client lock
authorMatt Joiner <anacrolix@gmail.com>
Sat, 14 Nov 2020 11:53:55 +0000 (22:53 +1100)
committerMatt Joiner <anacrolix@gmail.com>
Mon, 16 Nov 2020 05:37:11 +0000 (16:37 +1100)
torrent.go

index 38c92ee9ffaecbbb7dd84481d05f0a19354e2755..9e980abe265bb8c7c13b63d614bdd4a613fe4b03 100644 (file)
@@ -1748,10 +1748,16 @@ func (t *Torrent) pieceHashed(piece pieceIndex, passed bool, hashIoErr error) {
                        c._stats.incrementPiecesDirtiedGood()
                }
                t.clearPieceTouchers(piece)
+               t.cl.unlock()
                err := p.Storage().MarkComplete()
                if err != nil {
                        t.logger.Printf("%T: error marking piece complete %d: %s", t.storage, piece, err)
                }
+               t.cl.lock()
+
+               if t.closed.IsSet() {
+                       return
+               }
                t.pendAllChunkSpecs(piece)
        } else {
                if len(p.dirtiers) != 0 && p.allChunksDirty() && hashIoErr == nil {