cluster: do not synchronously emit 'setup' event
authorSam Roberts <sam@strongloop.com>
Wed, 18 Dec 2013 00:04:20 +0000 (16:04 -0800)
committerTimothy J Fontaine <tjfontaine@gmail.com>
Tue, 31 Dec 2013 19:43:44 +0000 (11:43 -0800)
This is a problem present in both v0.10, and v0.11, where the 'setup'
event is synchronously emitted by `cluster.setupMaster()`, a mostly
harmless anti-pattern.

lib/cluster.js
test/simple/test-cluster-setup-master.js

index f75fda5..4f8fb8c 100644 (file)
@@ -269,7 +269,9 @@ function masterInit() {
         process._debugProcess(cluster.workers[key].process.pid);
     });
 
-    cluster.emit('setup');
+    process.nextTick(function() {
+      cluster.emit('setup');
+    });
   };
 
   var ids = 0;
index b842228..d9f3879 100644 (file)
@@ -39,6 +39,12 @@ if (cluster.isWorker) {
 
   var totalWorkers = 2;
 
+  // Setup master
+  cluster.setupMaster({
+    args: ['custom argument'],
+    silent: true
+  });
+
   cluster.once('setup', function() {
     checks.setupEvent = true;
 
@@ -51,12 +57,6 @@ if (cluster.isWorker) {
     }
   });
 
-  // Setup master
-  cluster.setupMaster({
-    args: ['custom argument'],
-    silent: true
-  });
-
   var correctIn = 0;
 
   cluster.on('online', function lisenter(worker) {