From 4104880a663088e03692ec1a55ea26d4eb2d3ba1 Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Wed, 18 Dec 2019 16:49:15 +1100 Subject: [PATCH] Remove unnecessary locking in Torrent.Piece --- t.go | 7 ++----- torrent.go | 6 ++++-- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/t.go b/t.go index 92a265f1..95b69fe7 100644 --- a/t.go +++ b/t.go @@ -15,8 +15,7 @@ func (t *Torrent) InfoHash() metainfo.Hash { return t.infoHash } -// Returns a channel that is closed when the info (.Info()) for the torrent -// has become available. +// Returns a channel that is closed when the info (.Info()) for the torrent has become available. func (t *Torrent) GotInfo() <-chan struct{} { t.cl.lock() defer t.cl.unlock() @@ -243,7 +242,5 @@ func (t *Torrent) AddTrackers(announceList [][]string) { } func (t *Torrent) Piece(i pieceIndex) *Piece { - t.cl.lock() - defer t.cl.unlock() - return &t.pieces[i] + return t.piece(i) } diff --git a/torrent.go b/torrent.go index 8a7a72f1..2937b94c 100644 --- a/torrent.go +++ b/torrent.go @@ -36,7 +36,8 @@ func (t *Torrent) chunkIndexSpec(chunkIndex pp.Integer, piece pieceIndex) chunkS return chunkIndexSpec(chunkIndex, t.pieceLength(piece), t.chunkSize) } -// Maintains state of torrent within a Client. +// Maintains state of torrent within a Client. Many methods should not be called before the info is +// available, see .Info and .GotInfo. type Torrent struct { // Torrent-level aggregate statistics. First in struct to ensure 64-bit // alignment. See #262. @@ -1698,7 +1699,8 @@ func (t *Torrent) queuePieceCheck(pieceIndex pieceIndex) { t.tryCreateMorePieceHashers() } -// Forces all the pieces to be re-hashed. See also Piece.VerifyData. +// Forces all the pieces to be re-hashed. See also Piece.VerifyData. This should not be called +// before the Info is available. func (t *Torrent) VerifyData() { for i := pieceIndex(0); i < t.NumPieces(); i++ { t.Piece(i).VerifyData() -- 2.48.1