diff --git a/lib/sys.js b/lib/sys.js index 1d34713f3a26ec..1054c307c3e019 100644 --- a/lib/sys.js +++ b/lib/sys.js @@ -328,6 +328,15 @@ exports.exec = function () { exports.pump = function (readStream, writeStream, callback) { + var callbackCalled = false; + + function call (a, b, c) { + if (callback && !callbackCalled) { + callback(a, b, c); + callbackCalled = true; + } + } + if (!readStream.pause) readStream.pause = function () {readStream.emit("pause")}; if (!readStream.resume) readStream.resume = function () {readStream.emit("resume")}; @@ -352,12 +361,17 @@ exports.pump = function (readStream, writeStream, callback) { }); readStream.addListener("close", function () { - if (callback) callback(); + call(); }); - readStream.addListener("error", function(err) { + readStream.addListener("error", function (err) { writeStream.end(); - if (callback) callback(err); + call(err); + }); + + writeStream.addListener("error", function (err) { + readStream.destroy(); + call(err); }); };