diff options
author | Ruben Bridgewater <ruben@bridgewater.de> | 2019-05-14 16:45:15 +0200 |
---|---|---|
committer | Daniel Bevenius <daniel.bevenius@gmail.com> | 2019-05-17 05:39:00 +0200 |
commit | 9375088bd3df5a1bd2c4dfc5be1b1d37a7fe2dda (patch) | |
tree | f5d44bf6b3e7fbef0d6469c2223586f4d788432f | |
parent | 776e0000bc57ffadc5a21bf2c9307e9c217f1613 (diff) | |
download | android-node-v8-9375088bd3df5a1bd2c4dfc5be1b1d37a7fe2dda.tar.gz android-node-v8-9375088bd3df5a1bd2c4dfc5be1b1d37a7fe2dda.tar.bz2 android-node-v8-9375088bd3df5a1bd2c4dfc5be1b1d37a7fe2dda.zip |
events: improve max listeners warning
This adds the constructor name of the event target to the emitted
warning. Right now it's difficult to identify where the leak is
actually coming from and having some further information about the
source will likely help to identify the source.
PR-URL: https://github.com/nodejs/node/pull/27694
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
Reviewed-By: Rich Trott <rtrott@gmail.com>
Reviewed-By: Yongsheng Zhang <zyszys98@gmail.com>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Сковорода Никита Андреевич <chalkerx@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
4 files changed, 20 insertions, 6 deletions
diff --git a/lib/events.js b/lib/events.js index 3deb155479..438c8f8306 100644 --- a/lib/events.js +++ b/lib/events.js @@ -31,6 +31,10 @@ const { ERR_UNHANDLED_ERROR } = require('internal/errors').codes; +const { + inspect +} = require('internal/util/inspect'); + function EventEmitter() { EventEmitter.init.call(this); } @@ -253,8 +257,8 @@ function _addListener(target, type, listener, prepend) { // eslint-disable-next-line no-restricted-syntax const w = new Error('Possible EventEmitter memory leak detected. ' + `${existing.length} ${String(type)} listeners ` + - 'added. Use emitter.setMaxListeners() to ' + - 'increase limit'); + `added to ${inspect(target, { depth: -1 })}. Use ` + + 'emitter.setMaxListeners() to increase limit'); w.name = 'MaxListenersExceededWarning'; w.emitter = target; w.type = type; diff --git a/test/parallel/test-event-emitter-max-listeners-warning-for-null.js b/test/parallel/test-event-emitter-max-listeners-warning-for-null.js index 2929e1c709..40b5f798cb 100644 --- a/test/parallel/test-event-emitter-max-listeners-warning-for-null.js +++ b/test/parallel/test-event-emitter-max-listeners-warning-for-null.js @@ -15,7 +15,8 @@ process.on('warning', common.mustCall((warning) => { assert.strictEqual(warning.emitter, e); assert.strictEqual(warning.count, 2); assert.strictEqual(warning.type, null); - assert.ok(warning.message.includes('2 null listeners added.')); + assert.ok(warning.message.includes( + '2 null listeners added to [EventEmitter].')); })); e.on(null, () => {}); diff --git a/test/parallel/test-event-emitter-max-listeners-warning-for-symbol.js b/test/parallel/test-event-emitter-max-listeners-warning-for-symbol.js index 51c31ba0cf..c27b38c252 100644 --- a/test/parallel/test-event-emitter-max-listeners-warning-for-symbol.js +++ b/test/parallel/test-event-emitter-max-listeners-warning-for-symbol.js @@ -17,7 +17,8 @@ process.on('warning', common.mustCall((warning) => { assert.strictEqual(warning.emitter, e); assert.strictEqual(warning.count, 2); assert.strictEqual(warning.type, symbol); - assert.ok(warning.message.includes('2 Symbol(symbol) listeners added.')); + assert.ok(warning.message.includes( + '2 Symbol(symbol) listeners added to [EventEmitter].')); })); e.on(symbol, () => {}); diff --git a/test/parallel/test-event-emitter-max-listeners-warning.js b/test/parallel/test-event-emitter-max-listeners-warning.js index 0be7fc84bc..3d047766b3 100644 --- a/test/parallel/test-event-emitter-max-listeners-warning.js +++ b/test/parallel/test-event-emitter-max-listeners-warning.js @@ -6,7 +6,14 @@ const common = require('../common'); const events = require('events'); const assert = require('assert'); -const e = new events.EventEmitter(); +class FakeInput extends events.EventEmitter { + resume() {} + pause() {} + write() {} + end() {} +} + +const e = new FakeInput(); e.setMaxListeners(1); process.on('warning', common.mustCall((warning) => { @@ -15,7 +22,8 @@ process.on('warning', common.mustCall((warning) => { assert.strictEqual(warning.emitter, e); assert.strictEqual(warning.count, 2); assert.strictEqual(warning.type, 'event-type'); - assert.ok(warning.message.includes('2 event-type listeners added.')); + assert.ok(warning.message.includes( + '2 event-type listeners added to [FakeInput].')); })); e.on('event-type', () => {}); |