]> Sergey Matveev's repositories - btrtrc.git/blobdiff - t.go
Drop support for go 1.20
[btrtrc.git] / t.go
diff --git a/t.go b/t.go
index de7965dc5be2bbe0e0cd534dae2017fac6a93122..45856cc7acbeaa5988074f74435d078a49111a57 100644 (file)
--- a/t.go
+++ b/t.go
@@ -86,8 +86,8 @@ func (t *Torrent) NumPieces() pieceIndex {
 
 // Get missing bytes count for specific piece.
 func (t *Torrent) PieceBytesMissing(piece int) int64 {
-       t.cl.lock()
-       defer t.cl.unlock()
+       t.cl.rLock()
+       defer t.cl.rUnlock()
 
        return int64(t.pieces[piece].bytesLeft())
 }
@@ -100,7 +100,10 @@ func (t *Torrent) Drop() {
        defer wg.Wait()
        t.cl.lock()
        defer t.cl.unlock()
-       t.cl.dropTorrent(t.infoHash, &wg)
+       err := t.cl.dropTorrent(t.infoHash, &wg)
+       if err != nil {
+               panic(err)
+       }
 }
 
 // Number of bytes of the entire torrent we have completed. This is the sum of
@@ -122,9 +125,9 @@ func (t *Torrent) SubscribePieceStateChanges() *pubsub.Subscription[PieceStateCh
 // Returns true if the torrent is currently being seeded. This occurs when the
 // client is willing to upload without wanting anything in return.
 func (t *Torrent) Seeding() (ret bool) {
-       t.cl.lock()
+       t.cl.rLock()
        ret = t.seeding()
-       t.cl.unlock()
+       t.cl.rUnlock()
        return
 }
 
@@ -153,8 +156,8 @@ func (t *Torrent) Length() int64 {
 // Returns a run-time generated metainfo for the torrent that includes the
 // info bytes and announce-list as currently known to the client.
 func (t *Torrent) Metainfo() metainfo.MetaInfo {
-       t.cl.lock()
-       defer t.cl.unlock()
+       t.cl.rLock()
+       defer t.cl.rUnlock()
        return t.newMetaInfo()
 }
 
@@ -232,8 +235,8 @@ func (t *Torrent) Files() []*File {
 
 func (t *Torrent) AddPeers(pp []PeerInfo) (n int) {
        t.cl.lock()
+       defer t.cl.unlock()
        n = t.addPeers(pp)
-       t.cl.unlock()
        return
 }