bitswap: Don't clear 'active' until Connect calls are finished
License: MIT Signed-off-by: Jeromy <why@ipfs.io>
Jeromy committed
Sep 1, 2016 at 08:26 UTC
b9130108cf39188c6a17f80c00e00d8846695607
1 file changed
+4
exchange/bitswap/workers.go
+4
@@ -201,14 +201,18 @@ func (bs *Bitswap) providerQueryManager(ctx context.Context) {
201
child, cancel := context.WithTimeout(e.Ctx, providerRequestTimeout)
202
defer cancel()
203
providers := bs.network.FindProvidersAsync(child, e.Key, maxProvidersPerRequest)
204
+ wg := &sync.WaitGroup{}
205
for p := range providers {
206
+ wg.Add(1)
207
go func(p peer.ID) {
208
+ defer wg.Done()
209
err := bs.network.ConnectTo(child, p)
210
if err != nil {
211
log.Debug("failed to connect to provider %s: %s", p, err)
212
}
213
}(p)
214
}
215
+ wg.Wait()
216
activeLk.Lock()
217
delete(active, e.Key)
218
activeLk.Unlock()