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) {
return Promise.race([
promise,
this._disconnected.then(() => {
throw new Error('disconnected')
}),
])
let listener
const pWrapper = new Promise((resolve, reject) => {
promise.then(resolve, reject)
this.on(
DISCONNECTED,
(listener = () => {
reject(new Error('disconnected'))
})
)
})
const clean = () => {
this.removeListener(DISCONNECTED, listener)
}
pWrapper.then(clean, clean)
return pWrapper
}
_sessionCallRetryOptions = {