diff --git a/benchmark/events/ee-add-remove.js b/benchmark/events/ee-add-remove.js index 7b6ec35f29b636..f4219d5491bace 100644 --- a/benchmark/events/ee-add-remove.js +++ b/benchmark/events/ee-add-remove.js @@ -2,7 +2,7 @@ const common = require('../common.js'); const events = require('events'); -const bench = common.createBenchmark(main, { n: [25e4] }); +const bench = common.createBenchmark(main, { n: [5e6] }); function main(conf) { const n = conf.n | 0; diff --git a/benchmark/events/ee-emit.js b/benchmark/events/ee-emit.js index 3d7eb43b228b71..0a6b842b7c38de 100644 --- a/benchmark/events/ee-emit.js +++ b/benchmark/events/ee-emit.js @@ -3,7 +3,7 @@ const common = require('../common.js'); const EventEmitter = require('events').EventEmitter; const bench = common.createBenchmark(main, { - n: [2e6], + n: [2e7], argc: [0, 2, 4, 10], listeners: [1, 5, 10], }); diff --git a/benchmark/events/ee-listeners-many.js b/benchmark/events/ee-listeners-many.js index 6cb0682b1ca9c3..6173244814d5ad 100644 --- a/benchmark/events/ee-listeners-many.js +++ b/benchmark/events/ee-listeners-many.js @@ -2,7 +2,7 @@ const common = require('../common.js'); const EventEmitter = require('events').EventEmitter; -const bench = common.createBenchmark(main, { n: [5e6] }); +const bench = common.createBenchmark(main, { n: [1e7] }); function main(conf) { const n = conf.n | 0; diff --git a/benchmark/events/ee-listeners.js b/benchmark/events/ee-listeners.js index dff73de0b17fc4..53e24bd750af9f 100644 --- a/benchmark/events/ee-listeners.js +++ b/benchmark/events/ee-listeners.js @@ -2,7 +2,7 @@ const common = require('../common.js'); const EventEmitter = require('events').EventEmitter; -const bench = common.createBenchmark(main, { n: [5e6] }); +const bench = common.createBenchmark(main, { n: [5e7] }); function main(conf) { const n = conf.n | 0; diff --git a/lib/events.js b/lib/events.js index 2f91b77c2b7a59..fab11d0d61f32f 100644 --- a/lib/events.js +++ b/lib/events.js @@ -375,13 +375,9 @@ EventEmitter.prototype.removeListener = return this; if (list === listener || list.listener === listener) { - if (events.size === 1) - this[kEvents] = undefined; - else { - events.delete(type); - if (events.has('removeListener')) - this.emit('removeListener', type, list.listener || listener); - } + events.delete(type); + if (events.size && events.has('removeListener')) + this.emit('removeListener', type, list.listener || listener); return this; } @@ -434,14 +430,10 @@ EventEmitter.prototype.removeAllListeners = // not listening for removeListener, no need to emit if (!events.has('removeListener')) { - if (arguments.length === 0) { - this[kEvents] = undefined; - } else if (events.has(type)) { - if (events.size === 1) - this[kEvents] = undefined; - else - events.delete(type); - } + if (arguments.length === 0) + this[kEvents] = new Map(); + else + events.delete(type); return this; } @@ -454,7 +446,7 @@ EventEmitter.prototype.removeAllListeners = this.removeAllListeners(key); } this.removeAllListeners('removeListener'); - this[kEvents] = undefined; + this[kEvents] = new Map(); return this; } @@ -475,7 +467,7 @@ EventEmitter.prototype.removeAllListeners = EventEmitter.prototype.listeners = function listeners(type, unwrap = true) { const events = this[kEvents]; - if (events === undefined) + if (events === undefined || !events.size) return []; const evlistener = events.get(type);