feat: abort all pending dials on stop

This commit is contained in:
Jacob Heun
2019-12-06 17:45:29 +01:00
parent 404fa69513
commit ba02764c5f
4 changed files with 41 additions and 3 deletions

View File

@ -38,6 +38,7 @@ class Dialer {
this.timeout = timeout
this.perPeerLimit = perPeerLimit
this.tokens = [...new Array(concurrency)].map((_, index) => index)
this.pendingDials = new Set()
}
/**
@ -69,6 +70,12 @@ class Dialer {
const signal = anySignal(signals)
const timeoutId = setTimeout(() => timeoutController.abort(), this.timeout)
const dial = {
dialRequest,
controller: timeoutController
}
this.pendingDials.add(dial)
try {
const dialResult = await dialRequest.run({ ...options, signal })
clearTimeout(timeoutId)
@ -81,6 +88,8 @@ class Dialer {
}
log.error(err)
throw err
} finally {
this.pendingDials.delete(dial)
}
}

View File

@ -194,8 +194,15 @@ class Libp2p extends EventEmitter {
log('libp2p is stopping')
try {
this.pubsub && await this.pubsub.stop()
this._dht && await this._dht.stop()
await Promise.all([
this.pubsub && this.pubsub.stop(),
this._dht && this._dht.stop()
])
for (const dial of this.dialer.pendingDials.values()) {
dial.abort()
}
await this.transportManager.close()
await this.registrar.close()
} catch (err) {