Commit 98dbf6070e8 for nodejs
commit 98dbf6070e8439e530f1678b11962a0f3719e1f6
Author: Ved Chaudhari <84765263+vedchaudhari@users.noreply.github.com>
Date: Tue Oct 27 16:28:13 2026 +0530
events: report original once() listener on removal
When a `once()` listener is removed, emit the original user-defined
function in the `removeListener` event instead of the internal wrapper,
matching the behavior of the single-listener path.
Assisted-by: claude:opus-5.5
Signed-off-by: vedchaudhari <vedc2853@gmail.com>
PR-URL: https://github.com/nodejs/node/pull/66621
Refs: https://github.com/nodejs/node/issues/5551
Refs: https://github.com/nodejs/node/pull/6394
Refs: https://github.com/nodejs/node/pull/33596
Reviewed-By: Chemi Atlow <chemi@atlow.co.il>
diff --git a/lib/events.js b/lib/events.js
index 8b20ea994d6..4866073de81 100644
--- a/lib/events.js
+++ b/lib/events.js
@@ -725,7 +725,7 @@ EventEmitter.prototype.removeListener =
events[type] = list[0];
if (events.removeListener !== undefined)
- this.emit('removeListener', type, listener);
+ this.emit('removeListener', type, listener.listener || listener);
}
return this;
diff --git a/test/parallel/test-event-emitter-remove-listeners.js b/test/parallel/test-event-emitter-remove-listeners.js
index e9e4a74a5b6..fe36554cc64 100644
--- a/test/parallel/test-event-emitter-remove-listeners.js
+++ b/test/parallel/test-event-emitter-remove-listeners.js
@@ -138,6 +138,18 @@ function listener2() {}
ee.emit('hello');
}
+{
+ const ee = new EventEmitter();
+
+ ee.once('hello', listener1);
+ ee.on('hello', listener2);
+ ee.on('removeListener', common.mustCall((eventName, listener) => {
+ assert.strictEqual(eventName, 'hello');
+ assert.strictEqual(listener, listener1);
+ }));
+ ee.emit('hello');
+}
+
{
const ee = new EventEmitter();