Skip to content

Commit a404bd1

Browse files
authored
Merge pull request #3412 from dennisrijsdijk/fix/3402-effect-runner-abort-signals
fix: effectRunner not cleaning up AbortSignals (#3402)
2 parents c8a58c6 + ae762d7 commit a404bd1

1 file changed

Lines changed: 17 additions & 4 deletions

File tree

src/backend/common/effect-runner.js

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -105,9 +105,12 @@ function triggerEffect(effect, trigger, outputs, manualAbortSignal, listAbortSig
105105
return reject(signal.reason);
106106
}
107107

108-
signal.addEventListener("abort", () => {
108+
function onAbort() {
109109
reject(signal.reason);
110-
});
110+
signal.removeEventListener("abort", onAbort);
111+
}
112+
113+
signal.addEventListener("abort", onAbort);
111114

112115
const sendDataToOverlay = (data, overlayInstance) => {
113116
const overlayEventName = effectDef.overlayExtension?.event?.name;
@@ -132,6 +135,8 @@ function triggerEffect(effect, trigger, outputs, manualAbortSignal, listAbortSig
132135
}
133136
} catch (error) {
134137
return reject(error);
138+
} finally {
139+
signal.removeEventListener("abort", onAbort);
135140
}
136141
});
137142
}
@@ -222,7 +227,7 @@ function runEffects(runEffectsContext) {
222227
abortController: effectListAbortController
223228
});
224229

225-
effectListAbortController.signal.addEventListener("abort", () => {
230+
function onAbort() {
226231
const { message, bubbleStop } = effectListAbortController.signal.reason ?? {};
227232

228233
logger.info(`Effect list ${runEffectsContext.effects.id} was aborted. Reason: ${message}`);
@@ -238,7 +243,10 @@ function runEffects(runEffectsContext) {
238243
stopEffectExecution: !!bubbleStop,
239244
outputs: runEffectsContext.outputs ?? {}
240245
});
241-
});
246+
effectListAbortController.signal.removeEventListener("abort", onAbort);
247+
}
248+
249+
effectListAbortController.signal.addEventListener("abort", onAbort);
242250

243251
/**
244252
* @type {Promise<void>[]}
@@ -247,6 +255,7 @@ function runEffects(runEffectsContext) {
247255

248256
for (const effect of effects) {
249257
if (effectListAbortController.signal.aborted) {
258+
effectListAbortController.signal.removeEventListener("abort", onAbort);
250259
return;
251260
}
252261

@@ -284,6 +293,8 @@ function runEffects(runEffectsContext) {
284293
runEffectsContext.executionId
285294
);
286295

296+
effectListAbortController.signal.removeEventListener("abort", onAbort);
297+
287298
return resolve({
288299
success: true,
289300
stopEffectExecution: response.bubbleStop,
@@ -309,6 +320,8 @@ function runEffects(runEffectsContext) {
309320
runEffectsContext.executionId
310321
);
311322

323+
effectListAbortController.signal.removeEventListener("abort", onAbort);
324+
312325
return resolve({
313326
success: true,
314327
stopEffectExecution: false,

0 commit comments

Comments
 (0)