diff options
Diffstat (limited to 'node_modules/combined-stream/lib')
-rw-r--r-- | node_modules/combined-stream/lib/combined_stream.js | 23 | ||||
-rw-r--r-- | node_modules/combined-stream/lib/defer.js | 26 |
2 files changed, 21 insertions, 28 deletions
diff --git a/node_modules/combined-stream/lib/combined_stream.js b/node_modules/combined-stream/lib/combined_stream.js index 809b3c2e7..125f097f3 100644 --- a/node_modules/combined-stream/lib/combined_stream.js +++ b/node_modules/combined-stream/lib/combined_stream.js @@ -1,7 +1,6 @@ var util = require('util'); var Stream = require('stream').Stream; var DelayedStream = require('delayed-stream'); -var defer = require('./defer.js'); module.exports = CombinedStream; function CombinedStream() { @@ -14,6 +13,8 @@ function CombinedStream() { this._released = false; this._streams = []; this._currentStream = null; + this._insideLoop = false; + this._pendingNext = false; } util.inherits(CombinedStream, Stream); @@ -68,6 +69,24 @@ CombinedStream.prototype.pipe = function(dest, options) { CombinedStream.prototype._getNext = function() { this._currentStream = null; + + if (this._insideLoop) { + this._pendingNext = true; + return; // defer call + } + + this._insideLoop = true; + try { + do { + this._pendingNext = false; + this._realGetNext(); + } while (this._pendingNext); + } finally { + this._insideLoop = false; + } +}; + +CombinedStream.prototype._realGetNext = function() { var stream = this._streams.shift(); @@ -89,7 +108,7 @@ CombinedStream.prototype._getNext = function() { this._handleErrors(stream); } - defer(this._pipeNext.bind(this, stream)); + this._pipeNext(stream); }.bind(this)); }; diff --git a/node_modules/combined-stream/lib/defer.js b/node_modules/combined-stream/lib/defer.js deleted file mode 100644 index b67110c7a..000000000 --- a/node_modules/combined-stream/lib/defer.js +++ /dev/null @@ -1,26 +0,0 @@ -module.exports = defer; - -/** - * Runs provided function on next iteration of the event loop - * - * @param {function} fn - function to run - */ -function defer(fn) -{ - var nextTick = typeof setImmediate == 'function' - ? setImmediate - : ( - typeof process == 'object' && typeof process.nextTick == 'function' - ? process.nextTick - : null - ); - - if (nextTick) - { - nextTick(fn); - } - else - { - setTimeout(fn, 0); - } -} |