Skip to content

Commit 4fbfd0f

Browse files
yuzheng14Ceres6
authored andcommittedAug 14, 2023
events: fix bug listenerCount don't compare wrapped listener
When add listener by once, it will be wrapped into another function. And when pass listener and there is just one event listener added by once, it will return 0 even if passed listener equal wrapped event listener. Refs: nodejs#46523 PR-URL: nodejs#48592 Reviewed-By: Luigi Pinca <[email protected]> Reviewed-By: Paolo Insogna <[email protected]> Reviewed-By: Minwoo Jung <[email protected]>
1 parent 95c7722 commit 4fbfd0f

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed
 

‎lib/events.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -847,7 +847,7 @@ function listenerCount(type, listener) {
847847

848848
if (typeof evlistener === 'function') {
849849
if (listener != null) {
850-
return listener === evlistener ? 1 : 0;
850+
return listener === evlistener || listener === evlistener.listener ? 1 : 0;
851851
}
852852

853853
return 1;

‎test/parallel/test-events-listener-count-with-listener.js

+12
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,18 @@ assert.strictEqual(EE.listenerCount('event'), 0);
1212
assert.strictEqual(EE.listenerCount('event', handler), 0);
1313
assert.strictEqual(EE.listenerCount('event', anotherHandler), 0);
1414

15+
EE.once('event', handler);
16+
17+
assert.strictEqual(EE.listenerCount('event'), 1);
18+
assert.strictEqual(EE.listenerCount('event', handler), 1);
19+
assert.strictEqual(EE.listenerCount('event', anotherHandler), 0);
20+
21+
EE.removeAllListeners('event');
22+
23+
assert.strictEqual(EE.listenerCount('event'), 0);
24+
assert.strictEqual(EE.listenerCount('event', handler), 0);
25+
assert.strictEqual(EE.listenerCount('event', anotherHandler), 0);
26+
1527
EE.on('event', handler);
1628

1729
assert.strictEqual(EE.listenerCount('event'), 1);

0 commit comments

Comments
 (0)
Please sign in to comment.