Skip to content

Commit dc596d0

Browse files
Lxxyxruyadorno
authored andcommitted
events: remove error listener on signal abort
Fixes: #36949 PR-URL: #36969 Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
1 parent d2d9ad7 commit dc596d0

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

lib/events.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -736,7 +736,7 @@ async function once(emitter, name, options = {}) {
736736
}
737737
function abortListener() {
738738
eventTargetAgnosticRemoveListener(emitter, name, resolver);
739-
eventTargetAgnosticRemoveListener(emitter, 'error', resolver);
739+
eventTargetAgnosticRemoveListener(emitter, 'error', errorListener);
740740
reject(lazyDOMException('The operation was aborted', 'AbortError'));
741741
}
742742
if (signal != null) {

test/parallel/test-events-once.js

+14
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,19 @@ async function abortSignalAfterEvent() {
169169
await once(ee, 'foo', { signal: ac.signal });
170170
}
171171

172+
async function abortSignalRemoveListener() {
173+
const ee = new EventEmitter();
174+
const ac = new AbortController();
175+
176+
try {
177+
process.nextTick(() => ac.abort());
178+
await once(ee, 'test', { signal: ac.signal });
179+
} catch {
180+
strictEqual(ee.listeners('test').length, 0);
181+
strictEqual(ee.listeners('error').length, 0);
182+
}
183+
}
184+
172185
async function eventTargetAbortSignalBefore() {
173186
const et = new EventTarget();
174187
const ac = new AbortController();
@@ -218,6 +231,7 @@ Promise.all([
218231
abortSignalBefore(),
219232
abortSignalAfter(),
220233
abortSignalAfterEvent(),
234+
abortSignalRemoveListener(),
221235
eventTargetAbortSignalBefore(),
222236
eventTargetAbortSignalAfter(),
223237
eventTargetAbortSignalAfterEvent(),

0 commit comments

Comments
 (0)