Skip to content

Commit 91c7d36

Browse files
committed
fix: avoid holding strong reference on finalizers
1 parent 1a6aa76 commit 91c7d36

File tree

1 file changed

+7
-2
lines changed

1 file changed

+7
-2
lines changed

lib/internal/abort_controller.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,11 @@ function lazyMessageChannel() {
8484
}
8585

8686
const clearTimeoutRegistry = new SafeFinalizationRegistry(clearTimeout);
87-
const finalizers = new SafeFinalizationRegistry((signal) => {
87+
const finalizers = new SafeFinalizationRegistry((signalWeakRef) => {
88+
const signal = signalWeakRef.deref();
89+
if (!signal) {
90+
return;
91+
}
8892
signal[kDependantSignals].forEach((ref) => {
8993
if (!ref.deref()) {
9094
signal[kDependantSignals].delete(ref);
@@ -244,11 +248,12 @@ class AbortSignal extends EventTarget {
244248
resultSignal[kSourceSignals] = new SafeSet();
245249
for (let i = 0; i < signalsArray.length; i++) {
246250
const signal = signalsArray[i];
247-
finalizers.register(resultSignal, signal);
248251
if (signal.aborted) {
249252
abortSignal(resultSignal, signal.reason);
250253
return resultSignal;
251254
}
255+
const signalWeakRef = new SafeWeakRef(signal);
256+
finalizers.register(resultSignal, signalWeakRef);
252257
signal[kDependantSignals] ??= new SafeSet();
253258
if (!signal[kComposite]) {
254259
resultSignal[kSourceSignals].add(new SafeWeakRef(signal));

0 commit comments

Comments
 (0)