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:
parent
b7d143842c
commit
7d53abad8b
@ -1039,6 +1039,9 @@ function emitKeypressEvents(stream, iface) {
|
||||
} else {
|
||||
stream.on('newListener', onNewListener);
|
||||
}
|
||||
if (iface) {
|
||||
iface.once('close', () => { stream.removeListener('data', onData); });
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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…
x
Reference in New Issue
Block a user