ctx.Done fixes
thanks @whyrusleeping for finding these.
Juan Batiz-Benet committed
Feb 9, 2015 at 23:17 UTC
1811f1efacd0b8a0e1cddc9c6e0f756ed73fd1c9
2 files changed
+14
-3
p2p/crypto/secio/rw.go
+8
-2
@@ -224,7 +224,10 @@ func writeMsgCtx(ctx context.Context, w msgio.Writer, msg proto.Message) ([]byte
224
done := make(chan error)
225
go func(m []byte) {
226
err := w.WriteMsg(m)
227
- done <- err
227
+ select {
228
+ case done <- err:
229
+ case <-ctx.Done():
230
+ }
231
}(enc)
232
233
select {
@@ -243,7 +246,10 @@ func readMsgCtx(ctx context.Context, r msgio.Reader, p proto.Message) ([]byte, e
246
go func() {
247
var err error
248
msg, err = r.ReadMsg()
246
- done <- err
249
+ select {
250
+ case done <- err:
251
+ case <-ctx.Done():
252
+ }
253
}()
254
255
select {
p2p/net/conn/dial.go
+6
-1
@@ -44,7 +44,12 @@ func (d *Dialer) Dial(ctx context.Context, raddr ma.Multiaddr, remote peer.ID) (
44
45
// do it async to ensure we respect don contexteone
46
go func() {
47
- defer func() { done <- struct{}{} }()
47
+ defer func() {
48
+ select {
49
+ case done <- struct{}{}:
50
+ case <-ctx.Done():
51
+ }
52
+ }()
53
54
c, err := newSingleConn(ctx, d.LocalPeer, remote, maconn)
55
if err != nil {