From 2563be472bfd84c6ed867efd21c4aeeb824d387f Mon Sep 17 00:00:00 2001 From: Julien Fontanet Date: Thu, 4 Apr 2019 13:42:45 +0200 Subject: [PATCH] fix(xen-api/_interruptOnDisconnect): dont use Promise.race `Promise.race()` leads to memory leaks if some promises are never resolved. See nodejs/node#17469 --- packages/xen-api/src/index.js | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/packages/xen-api/src/index.js b/packages/xen-api/src/index.js index 612381b18..31068b02c 100644 --- a/packages/xen-api/src/index.js +++ b/packages/xen-api/src/index.js @@ -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 = {