p2p: use stopCtx when dialing peers in Router (#5983)

This ensures we don't leak dial goroutines when shutting down the router.
This commit is contained in:
Erik Grinaker
2021-01-26 19:47:03 +01:00
committed by GitHub
parent 642ecc3f5c
commit 06de7459c9
+6 -5
View File
@@ -2,6 +2,7 @@ package p2p
import (
"context"
"errors"
"fmt"
"io"
"sync"
@@ -294,8 +295,10 @@ func (r *Router) dialPeers() {
}
go func() {
conn, err := r.dialPeer(address)
if err != nil {
conn, err := r.dialPeer(ctx, address)
if errors.Is(err, context.Canceled) {
return
} else if err != nil {
r.logger.Error("failed to dial peer", "peer", peerID)
if err = r.peerManager.DialFailed(peerID, address); err != nil {
r.logger.Error("failed to report dial failure", "peer", peerID, "err", err)
@@ -331,9 +334,7 @@ func (r *Router) dialPeers() {
}
// dialPeer attempts to connect to a peer.
func (r *Router) dialPeer(address PeerAddress) (Connection, error) {
ctx := context.Background()
func (r *Router) dialPeer(ctx context.Context, address PeerAddress) (Connection, error) {
resolveCtx, cancel := context.WithTimeout(ctx, 5*time.Second)
defer cancel()