From b623d9be6f4a3452d92b59d54ad2ebcc6cd0541e Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Wed, 7 May 2025 13:59:05 +1000 Subject: [PATCH] Remove some recursive read locking --- storage/piece-resource.go | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) 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{ -- 2.51.0