diff --git a/file.go b/file.go index 4fb4982d..ed2f5da9 100644 --- a/file.go +++ b/file.go @@ -156,9 +156,9 @@ func (f *File) SetPriority(prio piecePriority) { // Returns the priority per File.SetPriority. func (f *File) Priority() (prio piecePriority) { - f.t.cl.lock() + f.t.cl.rLock() prio = f.prio - f.t.cl.unlock() + f.t.cl.rUnlock() return } diff --git a/peer-conn-msg-writer.go b/peer-conn-msg-writer.go index b30d34e0..0dbc4ead 100644 --- a/peer-conn-msg-writer.go +++ b/peer-conn-msg-writer.go @@ -27,8 +27,8 @@ func (pc *PeerConn) initMessageWriter() { logger: pc.logger, w: pc.w, keepAlive: func() bool { - pc.locker().Lock() - defer pc.locker().Unlock() + pc.locker().RLock() + defer pc.locker().RUnlock() return pc.useful() }, writeBuffer: new(bytes.Buffer), diff --git a/peerconn.go b/peerconn.go index 77857d84..4d978f07 100644 --- a/peerconn.go +++ b/peerconn.go @@ -5,7 +5,6 @@ import ( "bytes" "errors" "fmt" - "golang.org/x/time/rate" "io" "math/rand" "net" @@ -27,6 +26,7 @@ import ( pp "github.com/anacrolix/torrent/peer_protocol" request_strategy "github.com/anacrolix/torrent/request-strategy" "github.com/anacrolix/torrent/typed-roaring" + "golang.org/x/time/rate" ) type PeerSource string @@ -356,8 +356,8 @@ func (cn *Peer) downloadRate() float64 { } func (cn *Peer) DownloadRate() float64 { - cn.locker().Lock() - defer cn.locker().Unlock() + cn.locker().RLock() + defer cn.locker().RUnlock() return cn.downloadRate() } diff --git a/t.go b/t.go index de7965dc..765f3cf2 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()) } @@ -122,9 +122,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 +153,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() }