Skip to content

Commit

Permalink
test: fix worker send error
Browse files Browse the repository at this point in the history
In test-child-process-fork-closed-channel-segfault.js, race condition
is observed between the server getting closed and the worker sending
a message. Accommodate the potential errors.

Earlier, the same race was observed between the client and server
and was addressed through ignoring the relevant errors through error
handler. The same mechanism is re-used for worker too.

The only difference is that the filter is applied at the callback
instead of at the worker's error listener.

Refs: #3635 (comment)
Fixes: #20836
PR-URL: #20973

Reviewed-By: Rich Trott <rtrott@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Jon Moss <me@jonathanmoss.me>
Reviewed-By: Matheus Marchini <matheus@sthima.com>
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
Reviewed-By: Bartosz Sosnowski <bartosz@janeasystems.com>
  • Loading branch information
gireeshpunathil committed May 29, 2018
1 parent 1dae526 commit 397eceb
Showing 1 changed file with 14 additions and 1 deletion.
15 changes: 14 additions & 1 deletion test/parallel/test-child-process-fork-closed-channel-segfault.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,16 @@ const server = net
.listen(0, function() {
const worker = cluster.fork();

worker.on('error', function(err) {
if (
err.code !== 'ECONNRESET' &&
err.code !== 'ECONNREFUSED' &&
err.code !== 'EMFILE'
) {
throw err;
}
});

function send(callback) {
const s = net.connect(server.address().port, function() {
worker.send({}, s, callback);
Expand Down Expand Up @@ -66,7 +76,10 @@ const server = net
send(function(err) {
// Ignore errors when sending the second handle because the worker
// may already have exited.
if (err && err.code !== 'ERR_IPC_CHANNEL_CLOSED') {
if (err && err.code !== 'ERR_IPC_CHANNEL_CLOSED' &&
err.code !== 'ECONNRESET' &&
err.code !== 'ECONNREFUSED' &&
err.code !== 'EMFILE') {
throw err;
}
});
Expand Down

0 comments on commit 397eceb

Please sign in to comment.