mirror of https://github.com/lukechilds/node.git
Browse Source
Add an optional callback parameter to `ChildProcess.prototype.send()`
that is invoked when the message has been sent.
Juggle the control channel's reference count so that in-flight messages
keep the event loop (and therefore the process) alive until they have
been sent.
`ChildProcess.prototype.send()` and `process.send()` used to operate
synchronously but became asynchronous in commit libuv/libuv@393c1c5
("unix: set non-block mode in uv_{pipe,tcp,udp}_open"), which landed
in io.js in commit 07bd05b
("deps: update libuv to 1.2.1").
Fixes: https://github.com/nodejs/node/issues/760
PR-URL: https://github.com/nodejs/node/pull/2620
Reviewed-By: trevnorris - Trevor Norris <trev.norris@gmail.com>
Reviewed-By: jasnell - James M Snell <jasnell@gmail.com>
v5.x
Ben Noordhuis
9 years ago
committed by
Rod Vagg
5 changed files with 111 additions and 36 deletions
@ -0,0 +1,19 @@ |
|||||
|
'use strict'; |
||||
|
const common = require('../common'); |
||||
|
const assert = require('assert'); |
||||
|
const fork = require('child_process').fork; |
||||
|
|
||||
|
if (process.argv[2] === 'child') { |
||||
|
process.send('ok', common.mustCall(function(err) { |
||||
|
assert.strictEqual(err, null); |
||||
|
})); |
||||
|
} else { |
||||
|
const child = fork(process.argv[1], ['child']); |
||||
|
child.on('message', common.mustCall(function(message) { |
||||
|
assert.strictEqual(message, 'ok'); |
||||
|
})); |
||||
|
child.on('exit', common.mustCall(function(exitCode, signalCode) { |
||||
|
assert.strictEqual(exitCode, 0); |
||||
|
assert.strictEqual(signalCode, null); |
||||
|
})); |
||||
|
} |
Loading…
Reference in new issue