Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/npm/cli.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/combined-stream/lib')
-rw-r--r--node_modules/combined-stream/lib/combined_stream.js23
-rw-r--r--node_modules/combined-stream/lib/defer.js26
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);
- }
-}