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>
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.
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);