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) {