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>
This commit is contained in:
parent
931a0d4634
commit
5883a59b21
@ -511,6 +511,7 @@ function workerInit() {
|
|||||||
});
|
});
|
||||||
cluster.worker = worker;
|
cluster.worker = worker;
|
||||||
process.once('disconnect', function() {
|
process.once('disconnect', function() {
|
||||||
|
worker.emit('disconnect');
|
||||||
if (!worker.suicide) {
|
if (!worker.suicide) {
|
||||||
// Unexpected disconnect, master exited, or some such nastiness, so
|
// Unexpected disconnect, master exited, or some such nastiness, so
|
||||||
// worker exits immediately.
|
// worker exits immediately.
|
||||||
|
@ -8,6 +8,10 @@ if (cluster.isWorker) {
|
|||||||
|
|
||||||
}).listen(common.PORT, '127.0.0.1');
|
}).listen(common.PORT, '127.0.0.1');
|
||||||
|
|
||||||
|
cluster.worker.on('disconnect', function() {
|
||||||
|
process.exit(42);
|
||||||
|
});
|
||||||
|
|
||||||
} else if (cluster.isMaster) {
|
} else if (cluster.isMaster) {
|
||||||
|
|
||||||
var checks = {
|
var checks = {
|
||||||
@ -18,6 +22,7 @@ if (cluster.isWorker) {
|
|||||||
},
|
},
|
||||||
worker: {
|
worker: {
|
||||||
emitDisconnect: false,
|
emitDisconnect: false,
|
||||||
|
emitDisconnectInsideWorker: false,
|
||||||
emitExit: false,
|
emitExit: false,
|
||||||
state: false,
|
state: false,
|
||||||
suicideMode: false,
|
suicideMode: false,
|
||||||
@ -59,9 +64,11 @@ if (cluster.isWorker) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Check that the worker died
|
// Check that the worker died
|
||||||
worker.once('exit', function() {
|
worker.once('exit', function(code) {
|
||||||
checks.worker.emitExit = true;
|
checks.worker.emitExit = true;
|
||||||
checks.worker.died = !alive(worker.process.pid);
|
checks.worker.died = !alive(worker.process.pid);
|
||||||
|
checks.worker.emitDisconnectInsideWorker = code === 42;
|
||||||
|
|
||||||
process.nextTick(function() {
|
process.nextTick(function() {
|
||||||
process.exit(0);
|
process.exit(0);
|
||||||
});
|
});
|
||||||
@ -74,6 +81,7 @@ if (cluster.isWorker) {
|
|||||||
|
|
||||||
// events
|
// events
|
||||||
assert.ok(w.emitDisconnect, 'Disconnect event did not emit');
|
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(c.emitDisconnect, 'Disconnect event did not emit');
|
||||||
assert.ok(w.emitExit, 'Exit event did not emit');
|
assert.ok(w.emitExit, 'Exit event did not emit');
|
||||||
assert.ok(c.emitExit, 'Exit event did not emit');
|
assert.ok(c.emitExit, 'Exit event did not emit');
|
||||||
|
Loading…
x
Reference in New Issue
Block a user