fix(xen-api/_interruptOnDisconnect): dont use Promise.race

`Promise.race()` leads to memory leaks if some promises are never resolved.

See nodejs/node#17469
This commit is contained in:
Julien Fontanet 2019-04-04 13:42:45 +02:00
parent 7289e856d9
commit 2563be472b

View File

@ -672,12 +672,21 @@ export class Xapi extends EventEmitter {
} }
_interruptOnDisconnect(promise) { _interruptOnDisconnect(promise) {
return Promise.race([ let listener
promise, const pWrapper = new Promise((resolve, reject) => {
this._disconnected.then(() => { promise.then(resolve, reject)
throw new Error('disconnected') this.on(
}), DISCONNECTED,
]) (listener = () => {
reject(new Error('disconnected'))
})
)
})
const clean = () => {
this.removeListener(DISCONNECTED, listener)
}
pWrapper.then(clean, clean)
return pWrapper
} }
_sessionCallRetryOptions = { _sessionCallRetryOptions = {