diff --git a/swarm_dial.go b/swarm_dial.go index 1fe37a1fdd21836628d2a4b6f1de8952eb37d4a3..2d3255b4a674a21cb2e61b102d6ac3d174a35db0 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) } }