mirror of https://github.com/nodejs/node.git
test: prevent workers outliving parent
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: https://github.com/nodejs/node/issues/9255 PR-URL: https://github.com/nodejs/node/pull/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>pull/9257/head
parent
de24c45de7
commit
4d896c44f3
|
@ -39,15 +39,23 @@ if (process.argv[2] !== 'child') {
|
||||||
process.send('handle', socket);
|
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) => {
|
const server = net.createServer((c) => {
|
||||||
process.once('message', function(msg) {
|
process.once('message', function(msg) {
|
||||||
assert.strictEqual(msg, 'got');
|
assert.strictEqual(msg, 'got');
|
||||||
c.end('hello');
|
c.end('hello');
|
||||||
});
|
});
|
||||||
socketConnected();
|
socketConnected();
|
||||||
});
|
}).unref();
|
||||||
server.listen(0, common.localhostIPv4, () => {
|
server.listen(0, common.localhostIPv4, () => {
|
||||||
const port = server.address().port;
|
const port = server.address().port;
|
||||||
socket = net.connect(port, common.localhostIPv4, socketConnected);
|
socket = net.connect(port, common.localhostIPv4, socketConnected).unref();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue