Skip to content

Commit

Permalink
test: prevent workers outliving parent
Browse files Browse the repository at this point in the history
test-child-process-pass-fd.js parent can exit with an error on failure
to fork, in which case it will leak child processes. Limit child
lifetime to that of parent.

Fixes: nodejs#9255
PR-URL: nodejs#9257
Reviewed-By: Gibson Fahnestock <gibfahn@gmail.com>
Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
  • Loading branch information
sam-github committed Oct 27, 2016
1 parent de24c45 commit 4d896c4
Showing 1 changed file with 10 additions and 2 deletions.
12 changes: 10 additions & 2 deletions test/sequential/test-child-process-pass-fd.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,15 +39,23 @@ if (process.argv[2] !== 'child') {
process.send('handle', socket);
}

// As a side-effect, listening for the message event will ref the IPC channel,
// so the child process will stay alive as long as it has a parent process/IPC
// channel. Once this is done, we can unref our client and server sockets, and
// the only thing keeping this worker alive will be IPC. This is important,
// because it means a worker with no parent will have no referenced handles,
// thus no work to do, and will exit immediately, preventing process leaks.
process.on('message', function() {});

const server = net.createServer((c) => {
process.once('message', function(msg) {
assert.strictEqual(msg, 'got');
c.end('hello');
});
socketConnected();
});
}).unref();
server.listen(0, common.localhostIPv4, () => {
const port = server.address().port;
socket = net.connect(port, common.localhostIPv4, socketConnected);
socket = net.connect(port, common.localhostIPv4, socketConnected).unref();
});
}

0 comments on commit 4d896c4

Please sign in to comment.