From: Matt Joiner Date: Wed, 7 May 2025 03:59:05 +0000 (+1000) Subject: Remove some recursive read locking X-Git-Tag: v1.59.0~171 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=b623d9be6f4a3452d92b59d54ad2ebcc6cd0541e;p=btrtrc.git Remove some recursive read locking --- diff --git a/storage/piece-resource.go b/storage/piece-resource.go index 404aec95..4d703b35 100644 --- a/storage/piece-resource.go +++ b/storage/piece-resource.go @@ -9,10 +9,10 @@ import ( "path" "sort" "strconv" + "sync" g "github.com/anacrolix/generics" "github.com/anacrolix/missinggo/v2/resource" - "github.com/anacrolix/sync" "github.com/anacrolix/torrent/metainfo" ) @@ -142,7 +142,7 @@ func (s piecePerResourcePiece) writeConsecutiveChunks( // Returns if the piece is complete. Ok should be true, because we are the definitive source of // truth here. func (s piecePerResourcePiece) mustIsComplete() bool { - completion := s.Completion() + completion := s.completionLocked() if !completion.Ok { panic("must know complete definitively") } @@ -150,11 +150,15 @@ func (s piecePerResourcePiece) mustIsComplete() bool { } func (s piecePerResourcePiece) Completion() (_ Completion) { + s.mu.RLock() + defer s.mu.RUnlock() + return s.completionLocked() +} + +func (s piecePerResourcePiece) completionLocked() (_ Completion) { if !s.pieceHash.Ok { return } - s.mu.RLock() - defer s.mu.RUnlock() fi, err := s.completedInstance().Stat() if s.hasMovePrefix() { return Completion{