Unverified Commit 33c82070 authored by Whyrusleeping's avatar Whyrusleeping Committed by GitHub

Merge pull request #4407 from ipfs/fix/4394

fix deadlock in bitswap sessions
parents 586dd656 a94755db
...@@ -120,9 +120,13 @@ type interestReq struct { ...@@ -120,9 +120,13 @@ type interestReq struct {
// still be in the interest cache. // still be in the interest cache.
func (s *Session) isLiveWant(c *cid.Cid) bool { func (s *Session) isLiveWant(c *cid.Cid) bool {
resp := make(chan bool, 1) resp := make(chan bool, 1)
s.interestReqs <- interestReq{ select {
case s.interestReqs <- interestReq{
c: c, c: c,
resp: resp, resp: resp,
}:
case <-s.ctx.Done():
return false
} }
select { select {
...@@ -278,13 +282,17 @@ func (s *Session) cancel(keys []*cid.Cid) { ...@@ -278,13 +282,17 @@ func (s *Session) cancel(keys []*cid.Cid) {
} }
func (s *Session) cancelWants(keys []*cid.Cid) { func (s *Session) cancelWants(keys []*cid.Cid) {
s.cancelKeys <- keys select {
case s.cancelKeys <- keys:
case <-s.ctx.Done():
}
} }
func (s *Session) fetch(ctx context.Context, keys []*cid.Cid) { func (s *Session) fetch(ctx context.Context, keys []*cid.Cid) {
select { select {
case s.newReqs <- keys: case s.newReqs <- keys:
case <-ctx.Done(): case <-ctx.Done():
case <-s.ctx.Done():
} }
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment