From 397eceb6d8eae723c0edc5a9050c72b6ce98d71c Mon Sep 17 00:00:00 2001 From: Gireesh Punathil Date: Sat, 26 May 2018 11:18:02 +0530 Subject: [PATCH] test: fix worker send error 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: https://github.com/nodejs/node/issues/3635#issuecomment-157714683 Fixes: https://github.com/nodejs/node/issues/20836 PR-URL: https://github.com/nodejs/node/pull/20973 Reviewed-By: Rich Trott Reviewed-By: Colin Ihrig Reviewed-By: Jon Moss Reviewed-By: Matheus Marchini Reviewed-By: Joyee Cheung Reviewed-By: Bartosz Sosnowski --- ...-child-process-fork-closed-channel-segfault.js | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/test/parallel/test-child-process-fork-closed-channel-segfault.js b/test/parallel/test-child-process-fork-closed-channel-segfault.js index 14cb4b8fd97ae9..c24a62379bf66e 100644 --- a/test/parallel/test-child-process-fork-closed-channel-segfault.js +++ b/test/parallel/test-child-process-fork-closed-channel-segfault.js @@ -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); @@ -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; } });