diff options
author | Denys Otrishko <shishugi@gmail.com> | 2018-07-06 02:19:15 +0300 |
---|---|---|
committer | Matteo Collina <hello@matteocollina.com> | 2018-08-10 17:16:59 +0200 |
commit | fe47b8b6a529233ada74dfb979e6164111737fc2 (patch) | |
tree | b53a7623ce923d7e0a320704a7a101e581150dfe /test/parallel/test-readable-single-end.js | |
parent | b85460498fc24b855efbc2516f8e7cc629e24bb6 (diff) | |
download | android-node-v8-fe47b8b6a529233ada74dfb979e6164111737fc2.tar.gz android-node-v8-fe47b8b6a529233ada74dfb979e6164111737fc2.tar.bz2 android-node-v8-fe47b8b6a529233ada74dfb979e6164111737fc2.zip |
stream: fix readable behavior for highWaterMark === 0
Avoid trying to emit 'readable' due to the fact that
state.length is always >= state.highWaterMark if highWaterMark is 0.
Therefore upon .read(0) call (through .on('readable')) stream assumed
that it has enough data to emit 'readable' even though
state.length === 0 instead of issuing _read(). Which led to the TTY
not recognizing that someone is waiting for the input.
Fixes: https://github.com/nodejs/node/issues/20503
Refs: https://github.com/nodejs/node/pull/18372
PR-URL: https://github.com/nodejs/node/pull/21690
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Diffstat (limited to 'test/parallel/test-readable-single-end.js')
-rw-r--r-- | test/parallel/test-readable-single-end.js | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/test/parallel/test-readable-single-end.js b/test/parallel/test-readable-single-end.js new file mode 100644 index 0000000000..0969d49aa4 --- /dev/null +++ b/test/parallel/test-readable-single-end.js @@ -0,0 +1,16 @@ +'use strict'; + +const common = require('../common'); +const { Readable } = require('stream'); + +// This test ensures that there will not be an additional empty 'readable' +// event when stream has ended (only 1 event signalling about end) + +const r = new Readable({ + read: () => {}, +}); + +r.push(null); + +r.on('readable', common.mustCall()); +r.on('end', common.mustCall()); |