From a3c6de76079adee43c5ca4c80aba1e1e84b3065d Mon Sep 17 00:00:00 2001 From: Roman Khafizianov Date: Thu, 24 Oct 2024 01:21:19 +0200 Subject: [PATCH] peerservice: do not dial under rlock --- net/peerservice/peerservice.go | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/net/peerservice/peerservice.go b/net/peerservice/peerservice.go index 0f880690..e742c7d5 100644 --- a/net/peerservice/peerservice.go +++ b/net/peerservice/peerservice.go @@ -4,6 +4,9 @@ import ( "context" "errors" "fmt" + "strings" + "sync" + "github.com/anyproto/any-sync/app" "github.com/anyproto/any-sync/app/logger" "github.com/anyproto/any-sync/net/peer" @@ -14,8 +17,6 @@ import ( "github.com/anyproto/any-sync/net/transport/yamux" "github.com/anyproto/any-sync/nodeconf" "go.uber.org/zap" - "strings" - "sync" ) const CName = "net.peerservice" @@ -78,21 +79,20 @@ func (p *peerService) PreferQuic(prefer bool) { } func (p *peerService) Dial(ctx context.Context, peerId string) (pr peer.Peer, err error) { - p.mu.RLock() - defer p.mu.RUnlock() - - addrs, err := p.getPeerAddrs(peerId) - if err != nil { - return - } - - var mc transport.MultiConn - log.DebugCtx(ctx, "dial", zap.String("peerId", peerId), zap.Strings("addrs", addrs)) - var schemes = yamuxPreferSchemes + p.mu.RLock() if p.preferQuic { schemes = quicPreferSchemes } + addrs, err := p.getPeerAddrs(peerId) + if err != nil { + p.mu.RUnlock() + return + } + p.mu.RUnlock() + + var mc transport.MultiConn + log.DebugCtx(ctx, "dial", zap.String("peerId", peerId), zap.Strings("addrs", addrs)) err = ErrAddrsNotFound for _, sch := range schemes {