mirror of https://github.com/nodejs/node.git
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!pull/5010/head
parent
972465a3b0
commit
b255f4c10a
|
@ -498,7 +498,7 @@ function setupChannel(target, channel) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
finish();
|
process.nextTick(finish);
|
||||||
};
|
};
|
||||||
|
|
||||||
channel.readStart();
|
channel.readStart();
|
||||||
|
|
|
@ -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…
Reference in New Issue