readline: clean up event listener in onNewListener

Once the Readline interface is closed, the 'data' event listener should
be removed.

PR-URL: https://github.com/nodejs/node/pull/13266
Ref: https://github.com/nodejs/node/pull/9447#discussion_r86599214
Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
Gibson Fahnestock authored and James M Snell committed 2017-06-01 16:20:03 -07:00
1 parent b7d143842c
commit 7d53abad8b
2 files changed
+7 -2

No files matched your search

+3
View File
@@ -1039,6 +1039,9 @@ function emitKeypressEvents(stream, iface) {
} else {
stream.on('newListener', onNewListener);
}
if (iface) {
iface.once('close', () => { stream.removeListener('data', onData); });
}
}
/**
+4 -2
View File
@@ -74,6 +74,8 @@ assert(!rawModeCalled);
assert(resumeCalled);
assert(!pauseCalled);
// One data listener for the keypress events.
assert.strictEqual(stream.listeners('data').length, 1);
// close() should call setRawMode(false)
expectedRawMode = false;
@@ -86,5 +88,5 @@ assert(!resumeCalled);
assert(pauseCalled);
assert.deepStrictEqual(stream.listeners('keypress'), []);
// one data listener for the keypress events.
assert.strictEqual(stream.listeners('data').length, 1);
// Data listener is removed once interface is closed.
assert.strictEqual(stream.listeners('data').length, 0);