diff --git a/lib/internal/child_process.js b/lib/internal/child_process.js index da213955a59345..e93e1ae2e62c79 100644 --- a/lib/internal/child_process.js +++ b/lib/internal/child_process.js @@ -551,7 +551,7 @@ function setupChannel(target, channel) { handle: handle, message: message.msg, }); - return; + return this._handleQueue.length === 1; } var obj = handleConversion[message.type]; diff --git a/test/parallel/test-child-process-send-returns-boolean.js b/test/parallel/test-child-process-send-returns-boolean.js index b751846947822c..73d4454087ec8e 100644 --- a/test/parallel/test-child-process-send-returns-boolean.js +++ b/test/parallel/test-child-process-send-returns-boolean.js @@ -1,9 +1,29 @@ 'use strict'; const common = require('../common'); const assert = require('assert'); +const path = require('path'); +const net = require('net'); const fork = require('child_process').fork; +const spawn = require('child_process').spawn; -const n = fork(common.fixturesDir + '/empty.js'); +const emptyFile = path.join(common.fixturesDir, 'empty.js'); + +const n = fork(emptyFile); const rv = n.send({ hello: 'world' }); assert.strictEqual(rv, true); + +const spawnOptions = { stdio: ['pipe', 'pipe', 'pipe', 'ipc'] }; +const s = spawn(process.execPath, [emptyFile], spawnOptions); +var handle = null; +s.on('exit', function() { + handle.close(); +}); + +net.createServer(common.fail).listen(common.PORT, function() { + handle = this._handle; + assert.strictEqual(s.send('one', handle), true); + assert.strictEqual(s.send('two', handle), true); + assert.strictEqual(s.send('three'), false); + assert.strictEqual(s.send('four'), false); +});