Merge pull request #766 from jbenet/ctx-done-fixes

ctx.Done fixes
This commit is contained in:
Juan Batiz-Benet 2015-02-09 23:52:32 -08:00
commit f6a336cc04
2 changed files with 14 additions and 3 deletions

View File

@ -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 {

View File

@ -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 {