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:
authorisaacs <i@izs.me>2010-08-27 07:17:33 +0400
committerisaacs <i@izs.me>2010-08-27 07:17:33 +0400
commit9b3e58228920bdb661d07061fd45a40961547650 (patch)
treee2091ec2f20193370e6c05c2ade1967bd4ab09c8
parent3a55d021b4504a9aabf4b8057ba623fafce558b5 (diff)
Bug where a pipe might call the cb twice. Reported by russell_h in IRC.v0.1.27-3
-rw-r--r--lib/utils/exec.js5
-rw-r--r--package.json2
2 files changed, 5 insertions, 2 deletions
diff --git a/lib/utils/exec.js b/lib/utils/exec.js
index 5bdc512f2..d7f7108b6 100644
--- a/lib/utils/exec.js
+++ b/lib/utils/exec.js
@@ -30,6 +30,7 @@ function exec (cmd, args, env, takeOver, cb) {
function logger (d) { if (d) process.binding("stdio").writeError(d+"") }
function pipe (cp1, cp2, cb) {
sys.pump(cp1.stdout, cp2.stdin)
+ var errState = null
if (log.level <= log.LEVEL.silly) {
cp1.stderr.on("data", logger)
cp2.stderr.on("data", logger)
@@ -37,9 +38,11 @@ function pipe (cp1, cp2, cb) {
cp1.on("exit", function (code) {
if (!code) return log.verbose(cp2.name || "<unknown>", "success")
cp2.kill()
- cb(new Error( "Failed "+(cp1.name || "<unknown>")+"\nexited with "+code))
+ cb(errState = new Error(
+ "Failed "+(cp1.name || "<unknown>")+"\nexited with "+code))
})
cp2.on("exit", function (code) {
+ if (errState) return
if (!code) return log.verbose(cp1.name || "<unknown>", "success", cb)
cb(new Error( "Failed "+(cp2.name || "<unknown>")+"\nexited with "+code))
})
diff --git a/package.json b/package.json
index 2580f52e4..8e2c62670 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{ "name" : "npm"
, "description" : "A package manager for node"
-, "version" : "0.1.27-2"
+, "version" : "0.1.27-3"
, "homepage" : "http://npmjs.org/"
, "author" : "Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me)"
, "contributors" :