Skip to content

Commit 81ddeb9

Browse files
gibfahnjasnell
authored andcommitted
readline: clean up event listener in onNewListener
Once the Readline interface is closed, the 'data' event listener should be removed. PR-URL: nodejs#13266 Ref: nodejs#9447 (comment) Reviewed-By: James M Snell <[email protected]>
1 parent bccda4f commit 81ddeb9

File tree

2 files changed

+7
-2
lines changed

2 files changed

+7
-2
lines changed

lib/readline.js

+3
Original file line numberDiff line numberDiff line change
@@ -1039,6 +1039,9 @@ function emitKeypressEvents(stream, iface) {
10391039
} else {
10401040
stream.on('newListener', onNewListener);
10411041
}
1042+
if (iface) {
1043+
iface.once('close', () => { stream.removeListener('data', onData); });
1044+
}
10421045
}
10431046

10441047
/**

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

+4-2
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,8 @@ assert(!rawModeCalled);
7474
assert(resumeCalled);
7575
assert(!pauseCalled);
7676

77+
// One data listener for the keypress events.
78+
assert.strictEqual(stream.listeners('data').length, 1);
7779

7880
// close() should call setRawMode(false)
7981
expectedRawMode = false;
@@ -86,5 +88,5 @@ assert(!resumeCalled);
8688
assert(pauseCalled);
8789

8890
assert.deepStrictEqual(stream.listeners('keypress'), []);
89-
// one data listener for the keypress events.
90-
assert.strictEqual(stream.listeners('data').length, 1);
91+
// Data listener is removed once interface is closed.
92+
assert.strictEqual(stream.listeners('data').length, 0);

0 commit comments

Comments
 (0)