Skip to content

Commit ded311c

Browse files
committed
cluster: disconnect event was not emitted correctly
Fix for #1304 Inside of a worker, disconnect event was not emitted on cluster.worker
1 parent 1219e74 commit ded311c

File tree

2 files changed

+10
-1
lines changed

2 files changed

+10
-1
lines changed

lib/cluster.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -509,6 +509,7 @@ function workerInit() {
509509
});
510510
cluster.worker = worker;
511511
process.once('disconnect', function() {
512+
worker.emit('disconnect');
512513
if (!worker.suicide) {
513514
// Unexpected disconnect, master exited, or some such nastiness, so
514515
// worker exits immediately.

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

Lines changed: 9 additions & 1 deletion
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)