Browse Source

transform: Automatically read() on _write when read buffer is empty

v0.9.4-release
isaacs 12 years ago
parent
commit
caa853bb06
  1. 16
      lib/_stream_transform.js

16
lib/_stream_transform.js

@ -110,14 +110,28 @@ Transform.prototype._transform = function(chunk, output, cb) {
Transform.prototype._write = function(chunk, cb) {
var ts = this._transformState;
var rs = this._readableState;
ts.buffer.push([chunk, cb]);
// no need for auto-pull if already in the midst of one.
if (ts.transforming)
return;
// now we have something to transform, if we were waiting for it.
if (ts.pendingReadCb && !ts.transforming) {
// kick off a _read to pull it in.
if (ts.pendingReadCb) {
var readcb = ts.pendingReadCb;
ts.pendingReadCb = null;
this._read(-1, readcb);
}
// if we weren't waiting for it, but nothing is queued up, then
// still kick off a transform, just so it's there when the user asks.
if (rs.length === 0) {
var ret = this.read();
if (ret !== null)
return cb(new Error('invalid stream transform state'));
}
};
Transform.prototype._read = function(n, readcb) {

Loading…
Cancel
Save