diff --git a/p2p/crypto/secio/rw.go b/p2p/crypto/secio/rw.go index fe221c30c..758b2400e 100644 --- a/p2p/crypto/secio/rw.go +++ b/p2p/crypto/secio/rw.go @@ -224,7 +224,10 @@ func writeMsgCtx(ctx context.Context, w msgio.Writer, msg proto.Message) ([]byte done := make(chan error) go func(m []byte) { err := w.WriteMsg(m) - done <- err + select { + case done <- err: + case <-ctx.Done(): + } }(enc) select { @@ -243,7 +246,10 @@ func readMsgCtx(ctx context.Context, r msgio.Reader, p proto.Message) ([]byte, e go func() { var err error msg, err = r.ReadMsg() - done <- err + select { + case done <- err: + case <-ctx.Done(): + } }() select { diff --git a/p2p/net/conn/dial.go b/p2p/net/conn/dial.go index aabb4b508..7e8fe1841 100644 --- a/p2p/net/conn/dial.go +++ b/p2p/net/conn/dial.go @@ -44,7 +44,12 @@ func (d *Dialer) Dial(ctx context.Context, raddr ma.Multiaddr, remote peer.ID) ( // do it async to ensure we respect don contexteone go func() { - defer func() { done <- struct{}{} }() + defer func() { + select { + case done <- struct{}{}: + case <-ctx.Done(): + } + }() c, err := newSingleConn(ctx, d.LocalPeer, remote, maconn) if err != nil {