Skip to content

Commit

Permalink
fix: avoid holding strong reference on finalizers
Browse files Browse the repository at this point in the history
  • Loading branch information
geeksilva97 committed Oct 11, 2024
1 parent 1a6aa76 commit 91c7d36
Showing 1 changed file with 7 additions and 2 deletions.
9 changes: 7 additions & 2 deletions lib/internal/abort_controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,11 @@ function lazyMessageChannel() {
}

const clearTimeoutRegistry = new SafeFinalizationRegistry(clearTimeout);
const finalizers = new SafeFinalizationRegistry((signal) => {
const finalizers = new SafeFinalizationRegistry((signalWeakRef) => {
const signal = signalWeakRef.deref();
if (!signal) {
return;
}
signal[kDependantSignals].forEach((ref) => {
if (!ref.deref()) {
signal[kDependantSignals].delete(ref);
Expand Down Expand Up @@ -244,11 +248,12 @@ class AbortSignal extends EventTarget {
resultSignal[kSourceSignals] = new SafeSet();
for (let i = 0; i < signalsArray.length; i++) {
const signal = signalsArray[i];
finalizers.register(resultSignal, signal);
if (signal.aborted) {
abortSignal(resultSignal, signal.reason);
return resultSignal;
}
const signalWeakRef = new SafeWeakRef(signal);
finalizers.register(resultSignal, signalWeakRef);
signal[kDependantSignals] ??= new SafeSet();
if (!signal[kComposite]) {
resultSignal[kSourceSignals].add(new SafeWeakRef(signal));
Expand Down

0 comments on commit 91c7d36

Please sign in to comment.