Browse Source

cluster: don't send messages if no IPC channel

Avoid sending messages if the IPC channel is already disconnected. It
avoids undesired errors when calling `process.disconnect` when there are
still pending IPC messages.

PR-URL: https://github.com/nodejs/node/pull/7132
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
v6.x
Santiago Gimeno 9 years ago
committed by Evan Lucas
parent
commit
6d3d2d1ae4
  1. 3
      lib/cluster.js
  2. 18
      test/parallel/test-cluster-process-disconnect.js

3
lib/cluster.js

@ -740,6 +740,9 @@ function workerInit() {
var seq = 0;
var callbacks = {};
function sendHelper(proc, message, handle, cb) {
if (!proc.connected)
return false;
// Mark message as internal. See INTERNAL_PREFIX in lib/child_process.js
message = util._extend({ cmd: 'NODE_CLUSTER' }, message);
if (cb) callbacks[seq] = cb;

18
test/parallel/test-cluster-process-disconnect.js

@ -0,0 +1,18 @@
'use strict';
const common = require('../common');
const assert = require('assert');
const cluster = require('cluster');
if (cluster.isMaster) {
const worker = cluster.fork();
worker.on('exit', common.mustCall((code, signal) => {
assert.strictEqual(code, 0, 'worker did not exit normally');
assert.strictEqual(signal, null, 'worker did not exit normally');
}));
} else {
const net = require('net');
const server = net.createServer();
server.listen(common.PORT, common.mustCall(() => {
process.disconnect();
}));
}
Loading…
Cancel
Save