Worker.prototype.disconnect = function() {
this.suicide = true;
- var waitingHandles = 0;
+ let waitingCount = 1;
- function checkRemainingHandles() {
- waitingHandles--;
- if (waitingHandles === 0) {
+ function checkWaitingCount() {
+ waitingCount--;
+ if (waitingCount === 0) {
+ send({ act: 'suicide' });
process.disconnect();
}
}
- for (var key in handles) {
- var handle = handles[key];
+ for (const key in handles) {
+ const handle = handles[key];
delete handles[key];
- waitingHandles++;
- handle.owner.close(checkRemainingHandles);
- }
-
- if (waitingHandles === 0) {
- process.disconnect();
+ waitingCount++;
+ handle.owner.close(checkWaitingCount);
}
+ checkWaitingCount();
};
Worker.prototype.destroy = function() {
--- /dev/null
+'use strict';
+const common = require('../common');
+const assert = require('assert');
+const cluster = require('cluster');
+
+if (cluster.isMaster) {
+ const worker = cluster.fork();
+ let disconnected = false;
+
+ worker.on('disconnect', common.mustCall(function() {
+ assert.strictEqual(worker.suicide, true);
+ disconnected = true;
+ }));
+
+ worker.on('exit', common.mustCall(function() {
+ assert.strictEqual(worker.suicide, true);
+ assert.strictEqual(disconnected, true);
+ }));
+} else {
+ cluster.worker.disconnect();
+}