summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/_stream_readable.js2
-rw-r--r--test/parallel/test-stream-readable-resume-hwm.js21
2 files changed, 22 insertions, 1 deletions
diff --git a/lib/_stream_readable.js b/lib/_stream_readable.js
index 3e46a604e5..cbbfd0ba59 100644
--- a/lib/_stream_readable.js
+++ b/lib/_stream_readable.js
@@ -475,7 +475,7 @@ Readable.prototype.read = function(n) {
ret = null;
if (ret === null) {
- state.needReadable = true;
+ state.needReadable = state.length <= state.highWaterMark;
n = 0;
} else {
state.length -= n;
diff --git a/test/parallel/test-stream-readable-resume-hwm.js b/test/parallel/test-stream-readable-resume-hwm.js
new file mode 100644
index 0000000000..3f0bbad243
--- /dev/null
+++ b/test/parallel/test-stream-readable-resume-hwm.js
@@ -0,0 +1,21 @@
+'use strict';
+const common = require('../common');
+const { Readable } = require('stream');
+
+// readable.resume() should not lead to a ._read() call being scheduled
+// when we exceed the high water mark already.
+
+const readable = new Readable({
+ read: common.mustNotCall(),
+ highWaterMark: 100
+});
+
+// Fill up the internal buffer so that we definitely exceed the HWM:
+for (let i = 0; i < 10; i++)
+ readable.push('a'.repeat(200));
+
+// Call resume, and pause after one chunk.
+// The .pause() is just so that we don’t empty the buffer fully, which would
+// be a valid reason to call ._read().
+readable.resume();
+readable.once('data', common.mustCall(() => readable.pause()));