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:
parent
7289e856d9
commit
2563be472b
@ -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 = {
|
||||||
|
Loading…
Reference in New Issue
Block a user