diff options
Diffstat (limited to 'lib/cluster.js')
-rw-r--r-- | lib/cluster.js | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/lib/cluster.js b/lib/cluster.js index c994f433b9..6f355d0bc3 100644 --- a/lib/cluster.js +++ b/lib/cluster.js @@ -266,16 +266,34 @@ function masterInit() { assert(schedulingPolicy === SCHED_NONE || schedulingPolicy === SCHED_RR, 'Bad cluster.schedulingPolicy: ' + schedulingPolicy); - process.on('internalMessage', function(message) { - if (message.cmd !== 'NODE_DEBUG_ENABLED') return; - var key; - for (key in cluster.workers) - process._debugProcess(cluster.workers[key].process.pid); + var hasDebugArg = process.execArgv.some(function(argv) { + return /^(--debug|--debug-brk)(=\d+)?$/.test(argv); }); process.nextTick(function() { cluster.emit('setup', settings); }); + + // Send debug signal only if not started in debug mode, this helps a lot + // on windows, because RegisterDebugHandler is not called when node starts + // with --debug.* arg. + if (hasDebugArg) + return; + + process.on('internalMessage', function(message) { + if (message.cmd !== 'NODE_DEBUG_ENABLED') return; + var key; + for (key in cluster.workers) { + var worker = cluster.workers[key]; + if (worker.state === 'online') { + process._debugProcess(worker.process.pid); + } else { + worker.once('online', function() { + process._debugProcess(this.process.pid); + }); + } + } + }); }; function createWorkerProcess(id, env) { |