-
-
Notifications
You must be signed in to change notification settings - Fork 33.3k
Closed
Labels
streamIssues and PRs related to the stream subsystem.Issues and PRs related to the stream subsystem.
Description
In the documentation for stream.Readable, 'API for Stream Implementors', the documentation states that push should continue to be called until it returns false. However when calling push from an async callback each push call will call _read, leading to unexpected behaviour.
Example:
var stream = require('stream');
var util = require('util');
util.inherits(TestStream, stream.Readable);
function TestStream(options) {
stream.Readable.call(this, options);
}
TestStream.prototype._read = function(n) {
var mthis = this;
setTimeout(function() {
for (var i = 0; i < 5; ++i)
if (!mthis.push('x'))
break;
}, 2000);
};
var s = new TestStream();
s.pipe(process.stdout);
I expect this to output up to 5 'x' characters every 2 seconds. However, because each push call also does a _read call, after 2 seconds 5 callbacks will be registered and after 2 more seconds 25 'x' characters will be output.
I think push should not call _read like this, or at least return false after it has done so.
Metadata
Metadata
Assignees
Labels
streamIssues and PRs related to the stream subsystem.Issues and PRs related to the stream subsystem.