mirror of https://github.com/nodejs/node.git
child_process: fix assertion error in spawnSync
When ExitCallback was not called with an error such as ENOENT in uv_spawn, the process handle still remains refed and needs to be closed. Signed-off-by: Timothy J Fontaine <tjfontaine@gmail.com>archived-io.js-v0.10
parent
26a1b712ec
commit
ab7a3d098d
|
@ -511,6 +511,11 @@ void SyncProcessRunner::CloseHandlesAndDeleteLoop() {
|
|||
if (uv_loop_ != NULL) {
|
||||
CloseStdioPipes();
|
||||
CloseKillTimer();
|
||||
// Close the process handle when ExitCallback was not called.
|
||||
uv_handle_t* uv_process_handle =
|
||||
reinterpret_cast<uv_handle_t*>(&uv_process_);
|
||||
if (!uv_is_closing(uv_process_handle))
|
||||
uv_close(uv_process_handle, NULL);
|
||||
|
||||
// Give closing watchers a chance to finish closing and get their close
|
||||
// callbacks called.
|
||||
|
|
|
@ -39,6 +39,10 @@ console.log('sleep started');
|
|||
var ret = spawnSync('sleep', ['1']);
|
||||
console.log('sleep exited');
|
||||
|
||||
// Error test when command does not exist
|
||||
var ret_err = spawnSync('command_does_not_exist');
|
||||
assert.strictEqual(ret_err.error.code, 'ENOENT');
|
||||
|
||||
process.on('exit', function() {
|
||||
assert.strictEqual(ret.status, 0);
|
||||
|
||||
|
|
Loading…
Reference in New Issue