if (state.length - n <= state.highWaterMark)
doRead = true;
- // if we currently have *nothing*, then always try to get *something*
- // no matter what the high water mark says.
- if (state.length === 0)
- doRead = true;
-
// however, if we've ended, then there's no point, and if we're already
// reading, then it's unnecessary.
if (state.ended || state.reading)
doRead = false;
if (doRead) {
- var sync = true;
state.reading = true;
state.sync = true;
+ // if the length is currently zero, then we *need* a readable event.
+ if (state.length === 0)
+ state.needReadable = true;
// call internal read method
this._read(state.bufferSize, state.onread);
state.sync = false;
state.length -= n;
+ // If we have nothing in the buffer, then we want to know
+ // as soon as we *do* get something into the buffer.
+ if (state.length === 0 && !state.ended)
+ state.needReadable = true;
+
return ret;
};
var ret = fromList(n, state.buffer, state.length, !!state.decoder);
state.length -= n;
+ if (state.length === 0 && !state.ended)
+ state.needReadable = true;
+
if (state.length <= state.lowWaterMark && paused) {
stream.resume();
paused = false;