Skip to content

Commit

Permalink
lib: remove settled dependant signals when they are GCed
Browse files Browse the repository at this point in the history
  • Loading branch information
geeksilva97 committed Oct 10, 2024
1 parent 4988bb5 commit 845e5d2
Showing 1 changed file with 11 additions and 0 deletions.
11 changes: 11 additions & 0 deletions lib/internal/abort_controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,13 @@ function lazyMessageChannel() {
}

const clearTimeoutRegistry = new SafeFinalizationRegistry(clearTimeout);
const finalizers = new SafeFinalizationRegistry((signal) => {
signal[kDependantSignals].forEach((ref) => {
if (!ref.deref()) {
signal[kDependantSignals].delete(ref);
}
});
});
const gcPersistentSignals = new SafeSet();

const kAborted = Symbol('kAborted');
Expand Down Expand Up @@ -235,13 +242,17 @@ class AbortSignal extends EventTarget {
}
const resultSignalWeakRef = new SafeWeakRef(resultSignal);
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;
}
signal[kDependantSignals] ??= new SafeSet();

if (!signal[kComposite]) {
resultSignal[kSourceSignals].add(new SafeWeakRef(signal));
signal[kDependantSignals].add(resultSignalWeakRef);
Expand Down

0 comments on commit 845e5d2

Please sign in to comment.