Browse Source

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>
v6
Gibson Fahnestock 8 years ago
committed by James M Snell
parent
commit
7d53abad8b
  1. 3
      lib/readline.js
  2. 6
      test/parallel/test-readline-set-raw-mode.js

3
lib/readline.js

@ -1039,6 +1039,9 @@ function emitKeypressEvents(stream, iface) {
} else {
stream.on('newListener', onNewListener);
}
if (iface) {
iface.once('close', () => { stream.removeListener('data', onData); });
}
}
/**

6
test/parallel/test-readline-set-raw-mode.js

@ -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);

Loading…
Cancel
Save