Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit cb55c67

Browse filesBrowse files
mscdexrvagg
authored andcommitted
test: improve cluster-disconnect-handles test
This commit fixes two issues in test-cluster-disconnect-handles: 1. If the master's TCP connection to the worker fails, the worker process stays alive and causes many other tests that use the same common port number to also fail (with EADDRINUSE). 2. One particular problem that can cause the master's TCP connection to fail is attempting an IPv6 connection to the worker when no IPv6 network interfaces are available. PR-URL: #4084 Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
1 parent 1b434e0 commit cb55c67
Copy full SHA for cb55c67

File tree

Expand file treeCollapse file tree

1 file changed

+22
-2
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

1 file changed

+22
-2
lines changed
Open diff view settings
Collapse file

‎test/parallel/test-cluster-disconnect-handles.js‎

Copy file name to clipboardExpand all lines: test/parallel/test-cluster-disconnect-handles.js
+22-2Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ cluster.schedulingPolicy = cluster.SCHED_RR;
2323
// is to make sure the connection is still sitting in the master's
2424
// pending handle queue.
2525
if (cluster.isMaster) {
26+
let isKilling = false;
2627
const handles = require('internal/cluster').handles;
2728
// FIXME(bnoordhuis) lib/cluster.js scans the execArgv arguments for
2829
// debugger flags and renumbers any port numbers it sees starting
@@ -68,11 +69,30 @@ if (cluster.isMaster) {
6869
}));
6970
}));
7071
process.on('exit', () => assert.deepStrictEqual(handles, {}));
72+
process.on('uncaughtException', function(ex) {
73+
// Make sure we clean up so as not to leave a stray worker process running
74+
// if we encounter a connection or other error
75+
if (!worker.isDead()) {
76+
if (!isKilling) {
77+
isKilling = true;
78+
worker.once('exit', function() {
79+
throw ex;
80+
});
81+
worker.process.kill();
82+
}
83+
return;
84+
}
85+
throw ex;
86+
});
7187
} else {
7288
const server = net.createServer(socket => socket.pipe(socket));
73-
server.listen(() => {
89+
const cb = () => {
7490
process.send(['listening', server.address()]);
7591
debugger;
76-
});
92+
};
93+
if (common.hasIPv6)
94+
server.listen(cb);
95+
else
96+
server.listen(0, common.localhostIPv4, cb);
7797
process.on('disconnect', process.exit);
7898
}

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.