X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=t.go;h=45856cc7acbeaa5988074f74435d078a49111a57;hb=ac086bb3bd3b8e31c117362551eb0fe295a0f78d;hp=a20e02c869f50453da296df548795d29ae909150;hpb=eeb021b134137d2096f0ef899d5215ece8989ba0;p=btrtrc.git diff --git a/t.go b/t.go index a20e02c8..45856cc7 100644 --- 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 } @@ -147,14 +150,14 @@ func (t *Torrent) Name() string { // The completed length of all the torrent data, in all its files. This is // derived from the torrent info, when it is available. func (t *Torrent) Length() int64 { - return t._length.Value() + return t._length.Value } // 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 }