Browse Source

child_process: emit 'disconnect' asynchronously

Deferring I/O-triggered events to the next event loop tick is not just
a good idea, IT'S THE LAW!
v0.11.3-release
Ben Noordhuis 12 years ago
parent
commit
b255f4c10a
  1. 2
      lib/child_process.js
  2. 10
      test/simple/test-child-process-disconnect.js

2
lib/child_process.js

@ -498,7 +498,7 @@ function setupChannel(target, channel) {
return; return;
} }
finish(); process.nextTick(finish);
}; };
channel.readStart(); channel.readStart();

10
test/simple/test-child-process-disconnect.js

@ -27,6 +27,16 @@ var net = require('net');
// child // child
if (process.argv[2] === 'child') { if (process.argv[2] === 'child') {
// Check that the 'disconnect' event is deferred to the next event loop tick.
var disconnect = process.disconnect;
process.disconnect = function() {
disconnect.apply(this, arguments);
// If the event is emitted synchronously, we're too late by now.
process.once('disconnect', common.mustCall(disconnectIsNotAsync));
// The funky function name makes it show up legible in mustCall errors.
function disconnectIsNotAsync() {}
};
var server = net.createServer(); var server = net.createServer();
server.on('connection', function(socket) { server.on('connection', function(socket) {

Loading…
Cancel
Save