Skip to content

Commit 6b03921

Browse files
committed
readline: use removeListener event
use removeListener event rather than checking listeners().length every `data` event
1 parent 4b238b4 commit 6b03921

File tree

1 file changed

+12
-7
lines changed

1 file changed

+12
-7
lines changed

lib/readline.js

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -804,24 +804,29 @@ function emitKeypressEvents(stream) {
804804
stream._emitKeypress = true;
805805

806806
function onData(b) {
807-
if (stream.listeners('keypress').length > 0) {
808-
emitKey(stream, b);
809-
} else {
810-
// Nobody's watching anyway
811-
stream.removeListener('data', onData);
812-
stream.on('newListener', onNewListener);
813-
}
807+
emitKey(stream, b);
814808
}
815809

816810
function onNewListener(event) {
817811
if (event == 'keypress') {
818812
stream.on('data', onData);
813+
stream.on('removeListener', onRemovedListener);
819814
stream.removeListener('newListener', onNewListener);
820815
}
821816
}
817+
818+
function onRemovedListener(event) {
819+
if (event == 'keypress' && stream.listeners('keypress').length == 0) {
820+
// Nobody's watching anyway
821+
stream.removeListener('data', onData);
822+
stream.removeListener('removeListener', onRemovedListener);
823+
stream.on('newListener', onNewListener);
824+
}
825+
}
822826

823827
if (stream.listeners('keypress').length > 0) {
824828
stream.on('data', onData);
829+
stream.on('removeListener', onRemovedListener);
825830
} else {
826831
stream.on('newListener', onNewListener);
827832
}

0 commit comments

Comments
 (0)