cluster: use process.disconnect method
authorAndreas Madsen <amwebdk@gmail.com>
Wed, 1 Feb 2012 16:23:25 +0000 (17:23 +0100)
committerisaacs <i@izs.me>
Mon, 6 Feb 2012 22:54:11 +0000 (14:54 -0800)
After adding a .disconect method and connected flag in child_process
we should no longer use the process._channel object.

lib/cluster.js

index f08b15d..205df81 100644 (file)
@@ -381,20 +381,18 @@ Worker.prototype.destroy = function() {
   this.suicide = true;
 
   if (cluster.isMaster) {
-    // Stop channel
+    // Disconnect IPC channel
     // this way the worker won't need to propagate suicide state to master
     closeWorkerChannel(this, function() {
-      // Then kill worker
       self.process.kill();
     });
 
   } else {
     // Channel is open
-    if (this.process._channel !== null) {
+    if (this.process.connected) {
 
       // Inform master that is is suicide and then kill
       sendInternalMessage(this, {cmd: 'suicide'}, function() {
-        // Kill worker
         process.exit(0);
       });
 
@@ -404,7 +402,7 @@ Worker.prototype.destroy = function() {
       // from the master is resicved. Also we can't do a timeout and then
       // just kill, since we don't know if the quickDestroy function was called.
       setInterval(function() {
-        if (self.process._channel === null) {
+        if (!self.process.connected) {
           process.exit(0);
         }
       }, 200);
@@ -430,6 +428,7 @@ cluster.fork = function(env) {
 // However the workers may not die instantly
 function quickDestroyCluster() {
   eachWorker(function(worker) {
+    worker.process.disconnect();
     worker.process.kill();
   });
 }