From e7b6af60ca827a7ac737218d1dfae60e956fa294 Mon Sep 17 00:00:00 2001 From: vyzo Date: Wed, 31 Mar 2021 18:18:22 +0300 Subject: [PATCH] do a last ditch check for acceptable connections before dispatching a dial error --- swarm_dial.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/swarm_dial.go b/swarm_dial.go index 1fe37a1..2d3255b 100644 --- a/swarm_dial.go +++ b/swarm_dial.go @@ -341,7 +341,14 @@ func (s *Swarm) dialWorkerLoop(ctx context.Context, p peer.ID, reqch <-chan Dial delete(pr.addrs, ad.addr) if len(pr.addrs) == 0 { // all addrs have erred, dispatch dial error - pr.req.Resch <- DialResponse{Err: pr.err} + // but first do a last one check in case an acceptable connection has landed from + // a simultaneous dial that started later and added new acceptable addrs + c := s.bestAcceptableConnToPeer(pr.req.Ctx, p) + if c != nil { + pr.req.Resch <- DialResponse{Conn: c} + } else { + pr.req.Resch <- DialResponse{Err: pr.err} + } delete(requests, reqno) } } -- GitLab