From faa531477f7bd5f77ed5920783107f8a09b802b5 Mon Sep 17 00:00:00 2001 From: chad Date: Tue, 28 Mar 2023 20:12:00 -0500 Subject: [PATCH] fix: abort dial targets and creation of other connections to avoid memory leaks (#1616) --- src/connection-manager/dialer/index.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/connection-manager/dialer/index.ts b/src/connection-manager/dialer/index.ts index 7c7155c9ae..96edc2cd09 100644 --- a/src/connection-manager/dialer/index.ts +++ b/src/connection-manager/dialer/index.ts @@ -177,7 +177,15 @@ export class DefaultDialer implements Startable, Dialer { if (Array.isArray(multiaddr)) { // Return the first successful connection - return (await Promise.all(multiaddr.map(async (addr) => await this.createDialTarget(peerId, addr, options))))[0] + const connection = (await Promise.all(multiaddr.map(async (addr) => await this.createDialTarget(peerId, addr, options))))[0] + + // abort the creation of any other connections and/or close them, otherwise this will leak memory and sockets. + this.getPendingDialTargets().forEach((controller, id) => { + controller.abort() + this.pendingDialTargets.delete(id) + }) + + return connection } else { return await this.createDialTarget(peerId, multiaddr, options) }