Skip to content

Commit 5883a59

Browse files
Olegasbrendanashworth
authored andcommitted
cluster: disconnect event not emitted correctly
Inside of a worker, disconnect event was not emitted on cluster.worker Fixes: #1304 PR-URL: #1386 Reviewed-By: Colin Ihrig <[email protected]>
1 parent 931a0d4 commit 5883a59

File tree

2 files changed

+10
-1
lines changed

2 files changed

+10
-1
lines changed

lib/cluster.js

+1
Original file line numberDiff line numberDiff line change
@@ -511,6 +511,7 @@ function workerInit() {
511511
});
512512
cluster.worker = worker;
513513
process.once('disconnect', function() {
514+
worker.emit('disconnect');
514515
if (!worker.suicide) {
515516
// Unexpected disconnect, master exited, or some such nastiness, so
516517
// worker exits immediately.

test/parallel/test-cluster-worker-disconnect.js

+9-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ if (cluster.isWorker) {
88

99
}).listen(common.PORT, '127.0.0.1');
1010

11+
cluster.worker.on('disconnect', function() {
12+
process.exit(42);
13+
});
14+
1115
} else if (cluster.isMaster) {
1216

1317
var checks = {
@@ -18,6 +22,7 @@ if (cluster.isWorker) {
1822
},
1923
worker: {
2024
emitDisconnect: false,
25+
emitDisconnectInsideWorker: false,
2126
emitExit: false,
2227
state: false,
2328
suicideMode: false,
@@ -59,9 +64,11 @@ if (cluster.isWorker) {
5964
});
6065

6166
// Check that the worker died
62-
worker.once('exit', function() {
67+
worker.once('exit', function(code) {
6368
checks.worker.emitExit = true;
6469
checks.worker.died = !alive(worker.process.pid);
70+
checks.worker.emitDisconnectInsideWorker = code === 42;
71+
6572
process.nextTick(function() {
6673
process.exit(0);
6774
});
@@ -74,6 +81,7 @@ if (cluster.isWorker) {
7481

7582
// events
7683
assert.ok(w.emitDisconnect, 'Disconnect event did not emit');
84+
assert.ok(w.emitDisconnectInsideWorker, 'Disconnect event did not emit inside worker');
7785
assert.ok(c.emitDisconnect, 'Disconnect event did not emit');
7886
assert.ok(w.emitExit, 'Exit event did not emit');
7987
assert.ok(c.emitExit, 'Exit event did not emit');

0 commit comments

Comments
 (0)