Skip to content

Commit 4a23deb

Browse files
#72. Fix crash on process.send using fail safe
1 parent 53d242f commit 4a23deb

9 files changed

+33
-17
lines changed

cluster-service.js

+1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ exports.debug = require("./lib/util").debug;
1010
exports.log = require("./lib/util").log;
1111
exports.error = require("./lib/util").error;
1212
exports.results = require("./lib/util").results;
13+
exports.processSafeSend = require("./lib/util").processSafeSend;
1314
exports.msgBus = require("./lib/message-bus");
1415

1516
exports.workerReady = require("./lib/worker-ready");

lib/commands/workers.js

+6-2
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,12 @@ function getProcessDetails(worker) {
6969
}, 1000);
7070

7171
worker.on("message", msgCb);
72-
worker.process.send(cservice.msgBus.createMessage("processDetails"));
73-
worker.process.send(cservice.msgBus.createMessage("netStats"));
72+
cservice.processSafeSend(worker.process,
73+
cservice.msgBus.createMessage("processDetails")
74+
);
75+
cservice.processSafeSend(worker.process,
76+
cservice.msgBus.createMessage("netStats")
77+
);
7478
};
7579
}
7680

lib/message-bus.js

+4-3
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ function sendMessage(cmd, options, filter, cb) {
3535

3636
if (cluster.isWorker === true) {
3737
createWaiter(msg, process, cb);
38-
return process.send(msg); // send to master and wait for response
38+
// send to master and wait for response
39+
return cservice.processSafeSend(process, msg);
3940
}
4041

4142
var workers = cluster.workers;
@@ -76,7 +77,7 @@ function createWaiter(msg, process, cb) {
7677
function createWaiterTask(msg, process) {
7778
return function(asyncCb) {
7879
var waiter = createWaiter(msg, process, asyncCb);
79-
process.send(msg);
80+
cservice.processSafeSend(process, msg);
8081
if (!waiter) {
8182
// if no waiter, cb immediately
8283
asyncCb();
@@ -87,7 +88,7 @@ function createWaiterTask(msg, process) {
8788
function respondToMessage(msg, process, error, response) {
8889
msg.error = error;
8990
msg.response = response;
90-
process.send(msg);
91+
cservice.processSafeSend(process, msg);
9192
}
9293

9394
function processMessage(msg) {

lib/net-stats.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,9 @@ function monitor() {
5454

5555
switch (msg.cservice.cmd) {
5656
case "netStats":
57-
process.send(cservice.msgBus.createMessage("netStats", {
58-
netStats: net
57+
cservice.processSafeSend(process,
58+
cservice.msgBus.createMessage("netStats", {
59+
netStats: net
5960
}));
6061
break;
6162
}

lib/proxy-worker.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -136,5 +136,5 @@ function updateVersionLastAccess(version) {
136136
var msg = cservice.msgBus.createMessage("versionUpdateLastAccess", {
137137
version: version.name
138138
});
139-
process.send(msg);
139+
cservice.processSafeSend(process, msg);
140140
}

lib/util.js

+9
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ exports.debug = debug;
1212
exports.log = log;
1313
exports.error = error;
1414
exports.results = results;
15+
exports.processSafeSend = processSafeSend;
1516

1617
function debug() {
1718
var args;
@@ -201,3 +202,11 @@ function getArgFromValue(val) {
201202
return val; // use as-is
202203
}
203204
}
205+
206+
function processSafeSend(process, msg) {
207+
try {
208+
process.send(msg);
209+
} catch (ex) {
210+
return ex;
211+
}
212+
}

lib/worker-ready.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ function workerReady(options, forceIsWorker) {
3434
process.on("message", onMessageFromMaster);
3535

3636
// allow worker to inform the master when ready to speed up initialization
37-
process.send(
37+
cservice.processSafeSend(process,
3838
messageBus.createMessage("workerReady", {
3939
onStop: (typeof options.onWorkerStop === "function")
4040
})

lib/workers.js

+8-7
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,14 @@ function monitor() {
5656

5757
switch (msg.cservice.cmd) {
5858
case "processDetails":
59-
process.send(cservice.msgBus.createMessage("processDetails", {
60-
processDetails: {
61-
memory: process.memoryUsage(),
62-
title: process.title,
63-
uptime: process.uptime(),
64-
hrtime: process.hrtime()
65-
}
59+
cservice.processSafeSend(process,
60+
cservice.msgBus.createMessage("processDetails", {
61+
processDetails: {
62+
memory: process.memoryUsage(),
63+
title: process.title,
64+
uptime: process.uptime(),
65+
hrtime: process.hrtime()
66+
}
6667
}));
6768
break;
6869
}

package.json

-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
"extend": ">=1.1.x"
2424
},
2525
"devDependencies": {
26-
"6to5": "^3.6.5",
2726
"istanbul": "^0.3.13",
2827
"jshint": "^2.7.0",
2928
"mocha": "^2.2.4",

0 commit comments

Comments
 (0)