Skip to content

Commit 98c5089

Browse files
authored
Merge pull request #656 from libp2p/fix/context-cancel-bug
fix: lookup context cancellation race condition
2 parents 3d294c7 + 1dbefd3 commit 98c5089

File tree

1 file changed

+9
-0
lines changed

1 file changed

+9
-0
lines changed

query.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,10 +117,12 @@ func (dht *IpfsDHT) runLookupWithFollowup(ctx context.Context, target string, qu
117117
}
118118

119119
// wait for all queries to complete before returning, aborting ongoing queries if we've been externally stopped
120+
followupsCompleted := 0
120121
processFollowUp:
121122
for i := 0; i < len(queryPeers); i++ {
122123
select {
123124
case <-doneCh:
125+
followupsCompleted++
124126
if stopFn() {
125127
cancelFollowUp()
126128
if i < len(queryPeers)-1 {
@@ -130,10 +132,17 @@ processFollowUp:
130132
}
131133
case <-ctx.Done():
132134
lookupRes.completed = false
135+
cancelFollowUp()
133136
break processFollowUp
134137
}
135138
}
136139

140+
if !lookupRes.completed {
141+
for i := followupsCompleted; i < len(queryPeers); i++ {
142+
<-doneCh
143+
}
144+
}
145+
137146
return lookupRes, nil
138147
}
139148

0 commit comments

Comments
 (0)