From de057f60dd339d796661a2fc1a46fb3f353a589c Mon Sep 17 00:00:00 2001 From: Jeromy Date: Thu, 12 Feb 2015 19:53:34 +0000 Subject: [PATCH] fix a panic caused by context cancelling closing a promise channel --- exchange/bitswap/bitswap.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/exchange/bitswap/bitswap.go b/exchange/bitswap/bitswap.go index ed411fe36..1fcce72d9 100644 --- a/exchange/bitswap/bitswap.go +++ b/exchange/bitswap/bitswap.go @@ -151,7 +151,15 @@ func (bs *bitswap) GetBlock(parent context.Context, k u.Key) (*blocks.Block, err } select { - case block := <-promise: + case block, ok := <-promise: + if !ok { + select { + case <-ctx.Done(): + return nil, ctx.Err() + default: + return nil, errors.New("promise channel was closed") + } + } return block, nil case <-parent.Done(): return nil, parent.Err()