From f08985c193a7b55e4c82a1681290fb10a9e8471e Mon Sep 17 00:00:00 2001 From: Ryan Dahl Date: Thu, 16 Sep 2010 14:40:41 -0700 Subject: [PATCH] Handle writeStream errors in sys.pump --- lib/sys.js | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/lib/sys.js b/lib/sys.js index 1d34713..1054c30 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); }); }; -- 2.7.4