diff options
author | Oleg Elifantiev <oleg@elifantiev.ru> | 2015-04-02 23:27:27 +0300 |
---|---|---|
committer | Brendan Ashworth <brendan.ashworth@me.com> | 2015-05-08 12:33:14 -0700 |
commit | 5883a59b21a97e8b7339f435c977155a2c29ba8d (patch) | |
tree | 7e757dc207aa1c2f96d30eae203275ecd7e99db9 | |
parent | 931a0d463443c68a10c8028f2ebdd01db20da1f9 (diff) | |
download | node-new-5883a59b21a97e8b7339f435c977155a2c29ba8d.tar.gz |
cluster: disconnect event not emitted correctly
Inside of a worker, disconnect event was not emitted on cluster.worker
Fixes: https://github.com/iojs/io.js/issues/1304
PR-URL: https://github.com/iojs/io.js/pull/1386
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
-rw-r--r-- | lib/cluster.js | 1 | ||||
-rw-r--r-- | test/parallel/test-cluster-worker-disconnect.js | 10 |
2 files changed, 10 insertions, 1 deletions
diff --git a/lib/cluster.js b/lib/cluster.js index 10a55996f1..9a7900bc92 100644 --- a/lib/cluster.js +++ b/lib/cluster.js @@ -511,6 +511,7 @@ function workerInit() { }); cluster.worker = worker; process.once('disconnect', function() { + worker.emit('disconnect'); if (!worker.suicide) { // Unexpected disconnect, master exited, or some such nastiness, so // worker exits immediately. diff --git a/test/parallel/test-cluster-worker-disconnect.js b/test/parallel/test-cluster-worker-disconnect.js index 4bb9b163b6..e7a0960cb1 100644 --- a/test/parallel/test-cluster-worker-disconnect.js +++ b/test/parallel/test-cluster-worker-disconnect.js @@ -8,6 +8,10 @@ if (cluster.isWorker) { }).listen(common.PORT, '127.0.0.1'); + cluster.worker.on('disconnect', function() { + process.exit(42); + }); + } else if (cluster.isMaster) { var checks = { @@ -18,6 +22,7 @@ if (cluster.isWorker) { }, worker: { emitDisconnect: false, + emitDisconnectInsideWorker: false, emitExit: false, state: false, suicideMode: false, @@ -59,9 +64,11 @@ if (cluster.isWorker) { }); // Check that the worker died - worker.once('exit', function() { + worker.once('exit', function(code) { checks.worker.emitExit = true; checks.worker.died = !alive(worker.process.pid); + checks.worker.emitDisconnectInsideWorker = code === 42; + process.nextTick(function() { process.exit(0); }); @@ -74,6 +81,7 @@ if (cluster.isWorker) { // events assert.ok(w.emitDisconnect, 'Disconnect event did not emit'); + assert.ok(w.emitDisconnectInsideWorker, 'Disconnect event did not emit inside worker'); assert.ok(c.emitDisconnect, 'Disconnect event did not emit'); assert.ok(w.emitExit, 'Exit event did not emit'); assert.ok(c.emitExit, 'Exit event did not emit'); |