lib: setup IPC channel before console

Initializing IOCP on the same fd twice can fail on Windows.
Consequently, if the IPC channel uses fd 1 or 2 and the console is setup
first, writing to the IPC channel will fail.

PR-URL: https://github.com/nodejs/node/pull/16562
Fixes: https://github.com/nodejs/node/issues/16141
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Refael Ackermann <refack@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
Nikolai Vavilov 2017-10-27 21:23:59 +03:00
parent e2ce1307ed
commit 403ccb68a5
2 changed files with 24 additions and 6 deletions

View File

@ -37,12 +37,6 @@
NativeModule.require('internal/process/next_tick').setup();
NativeModule.require('internal/process/stdio').setup();
const browserGlobals = !process._noBrowserGlobals;
if (browserGlobals) {
setupGlobalTimeouts();
setupGlobalConsole();
}
const perf = process.binding('performance');
const {
NODE_PERFORMANCE_MILESTONE_BOOTSTRAP_COMPLETE,
@ -74,6 +68,12 @@
_process.setupRawDebug();
const browserGlobals = !process._noBrowserGlobals;
if (browserGlobals) {
setupGlobalTimeouts();
setupGlobalConsole();
}
// Ensure setURLConstructor() is called before the native
// URL::ToObject() method is used.
NativeModule.require('internal/url');

View File

@ -0,0 +1,18 @@
'use strict';
const common = require('../common');
const assert = require('assert');
const spawn = require('child_process').spawn;
if (process.argv[2] === 'child') {
process.send('hahah');
return;
}
const proc = spawn(process.execPath, [__filename, 'child'], {
stdio: ['inherit', 'ipc', 'inherit']
});
proc.on('exit', common.mustCall(function(code) {
assert.strictEqual(code, 0);
}));