Skip to content

Commit 5c643c3

Browse files
authored
fix: clear signal to avoid memory leaks (#1728)
Follow up from #1708 (comment)
1 parent 2a9617b commit 5c643c3

File tree

5 files changed

+20
-21
lines changed

5 files changed

+20
-21
lines changed

src/autonat/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -364,6 +364,8 @@ export class AutonatService implements Startable {
364364
)
365365
} catch (err) {
366366
log.error(err)
367+
} finally {
368+
signal.clear()
367369
}
368370
}
369371

src/identify/index.ts

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -305,18 +305,14 @@ class DefaultIdentifyService implements Startable, IdentifyService {
305305
}
306306

307307
async _identify (connection: Connection, options: AbortOptions = {}): Promise<Identify> {
308-
let signal = options.signal
309308
let stream: Stream | undefined
310309

311-
// create a timeout if no abort signal passed
312-
if (signal == null) {
313-
signal = anySignal([AbortSignal.timeout(this.timeout), options.signal])
310+
const signal = anySignal([AbortSignal.timeout(this.timeout), options?.signal])
314311

315-
try {
316-
// fails on node < 15.4
317-
setMaxListeners?.(Infinity, signal)
318-
} catch {}
319-
}
312+
try {
313+
// fails on node < 15.4
314+
setMaxListeners?.(Infinity, signal)
315+
} catch {}
320316

321317
try {
322318
stream = await connection.newStream([this.identifyProtocolStr], {
@@ -348,6 +344,7 @@ class DefaultIdentifyService implements Startable, IdentifyService {
348344
if (stream != null) {
349345
stream.close()
350346
}
347+
signal.clear()
351348
}
352349
}
353350

src/peer-routing.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -104,10 +104,11 @@ export class DefaultPeerRouting implements PeerRouting, Startable {
104104
return
105105
}
106106

107-
try {
108-
this.abortController = new AbortController()
109-
const signal = anySignal([this.abortController.signal, AbortSignal.timeout(this.refreshManagerInit.timeout ?? 10e3)])
107+
this.abortController = new AbortController()
108+
109+
const signal = anySignal([this.abortController.signal, AbortSignal.timeout(this.refreshManagerInit.timeout ?? 10e3)])
110110

111+
try {
111112
// this controller may be used while dialing lots of peers so prevent MaxListenersExceededWarning
112113
// appearing in the console
113114
try {
@@ -121,6 +122,7 @@ export class DefaultPeerRouting implements PeerRouting, Startable {
121122
} finally {
122123
this.abortController?.abort()
123124
this.abortController = undefined
125+
signal.clear()
124126
}
125127
}
126128

src/ping/index.ts

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -97,18 +97,14 @@ class DefaultPingService implements Startable, PingService {
9797
const start = Date.now()
9898
const data = randomBytes(PING_LENGTH)
9999
const connection = await this.components.connectionManager.openConnection(peer, options)
100-
let signal = options.signal
101100
let stream: Stream | undefined
102101

103-
// create a timeout if no abort signal passed
104-
if (signal == null) {
105-
signal = anySignal([AbortSignal.timeout(this.timeout), options.signal])
102+
const signal = anySignal([AbortSignal.timeout(this.timeout), options?.signal])
106103

107-
try {
108-
// fails on node < 15.4
109-
setMaxListeners?.(Infinity, signal)
110-
} catch {}
111-
}
104+
try {
105+
// fails on node < 15.4
106+
setMaxListeners?.(Infinity, signal)
107+
} catch {}
112108

113109
try {
114110
stream = await connection.newStream([this.protocol], {
@@ -134,6 +130,7 @@ class DefaultPingService implements Startable, PingService {
134130
if (stream != null) {
135131
stream.close()
136132
}
133+
signal.clear()
137134
}
138135
}
139136
}

src/upgrader.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,7 @@ export class DefaultUpgrader implements Upgrader {
254254
})
255255
} finally {
256256
this.components.connectionManager.afterUpgradeInbound()
257+
signal.clear()
257258
}
258259
}
259260

0 commit comments

Comments
 (0)