Fix error reporting in child_process callbacks
Issue 120, test case by Nathan Ostgard
This commit is contained in:
parent
a5b132ad63
commit
264e540d00
@ -86,7 +86,7 @@ exports.execFile = function (file, args /*, options, callback */) {
|
||||
|
||||
|
||||
function ChildProcess () {
|
||||
process.EventEmitter.call(this);
|
||||
EventEmitter.call(this);
|
||||
|
||||
var self = this;
|
||||
|
||||
@ -99,11 +99,14 @@ function ChildProcess () {
|
||||
var stdout = this.stdout = new Stream();
|
||||
var stderr = this.stderr = new Stream();
|
||||
|
||||
stderr.onend = stdout.onend = function () {
|
||||
function onClose () {
|
||||
if (gotCHLD && !stdout.readable && !stderr.readable) {
|
||||
self.emit('exit', exitCode, termSignal);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
stderr.addListener('close', onClose);
|
||||
stdout.addListener('close', onClose);
|
||||
|
||||
internal.onexit = function (code, signal) {
|
||||
gotCHLD = true;
|
||||
|
@ -1,11 +1,30 @@
|
||||
require("../common");
|
||||
var spawn = require('child_process').spawn
|
||||
, path = require('path')
|
||||
, sub = path.join(fixturesDir, 'exit.js')
|
||||
, child = spawn(process.argv[0], [sub, 23])
|
||||
;
|
||||
spawn = require('child_process').spawn,
|
||||
path = require('path');
|
||||
|
||||
child.addListener('exit', function(code, signal) {
|
||||
exits = 0;
|
||||
|
||||
exitScript = path.join(fixturesDir, 'exit.js')
|
||||
exitChild = spawn(process.argv[0], [exitScript, 23]);
|
||||
exitChild.addListener('exit', function(code, signal) {
|
||||
assert.strictEqual(code, 23);
|
||||
assert.strictEqual(signal, null);
|
||||
});
|
||||
|
||||
exits++;
|
||||
});
|
||||
|
||||
|
||||
|
||||
errorScript = path.join(fixturesDir, 'child_process_should_emit_error.js')
|
||||
errorChild = spawn(process.argv[0], [errorScript]);
|
||||
errorChild.addListener('exit', function(code, signal) {
|
||||
assert.ok(code !== 0);
|
||||
assert.strictEqual(signal, null);
|
||||
|
||||
exits++;
|
||||
});
|
||||
|
||||
|
||||
process.addListener('exit', function () {
|
||||
assert.equal(2, exits);
|
||||
});
|
||||
|
Loading…
x
Reference in New Issue
Block a user