From 0a03c66cc557eb3783f0df8f46108ba0b10b0693 Mon Sep 17 00:00:00 2001 From: Andre Weinand Date: Sat, 12 Mar 2016 00:15:45 +0100 Subject: [PATCH] Revert "stdfork respect stderr" This reverts commit dd7709ec29044160c8a260effa19caac4eed7980. --- extensions/typescript/src/utils/electron.ts | 27 ++++++------------- .../typescript/src/utils/electronForkStart.ts | 19 +++---------- src/vs/base/node/stdFork.ts | 26 ++++++------------ src/vs/base/node/stdForkStart.js | 19 +++---------- 4 files changed, 22 insertions(+), 69 deletions(-) diff --git a/extensions/typescript/src/utils/electron.ts b/extensions/typescript/src/utils/electron.ts index a4e08453f9f..25b780e4bfc 100644 --- a/extensions/typescript/src/utils/electron.ts +++ b/extensions/typescript/src/utils/electron.ts @@ -37,7 +37,7 @@ function generatePipeName(): string { return path.join(os.tmpdir(), randomName + '.sock'); } -function generatePatchedEnv(env:any, stdInPipeName:string, stdOutPipeName:string, stdErrPipeName:string): any { +function generatePatchedEnv(env:any, stdInPipeName:string, stdOutPipeName:string): any { // Set the two unique pipe names and the electron flag as process env var newEnv:any = {}; @@ -47,7 +47,6 @@ function generatePatchedEnv(env:any, stdInPipeName:string, stdOutPipeName:string newEnv['STDIN_PIPE_NAME'] = stdInPipeName; newEnv['STDOUT_PIPE_NAME'] = stdOutPipeName; - newEnv['STDERR_PIPE_NAME'] = stdErrPipeName; newEnv['ATOM_SHELL_INTERNAL_RUN_AS_NODE'] = '1'; return newEnv; @@ -71,38 +70,29 @@ export function fork(modulePath: string, args: string[], options: IForkOptions, callback(err, null); }; - // Generate three unique pipe names + // Generate two unique pipe names var stdInPipeName = generatePipeName(); var stdOutPipeName = generatePipeName(); - let stdErrPipeName = generatePipeName(); - - var newEnv = generatePatchedEnv(options.env || process.env, stdInPipeName, stdOutPipeName, stdErrPipeName); + var newEnv = generatePatchedEnv(options.env || process.env, stdInPipeName, stdOutPipeName); var childProcess: cp.ChildProcess; - // Begin listening to stderr pipe - let stdErrServer = net.createServer((stdErrStream) => { - // From now on the childProcess.stderr is available for reading - childProcess.stderr = stdErrStream; - }); - stdErrServer.listen(stdErrPipeName); - // Begin listening to stdout pipe - let stdOutServer = net.createServer((stdOutStream) => { + var server = net.createServer((stream) => { // The child process will write exactly one chunk with content `ready` when it has installed a listener to the stdin pipe - stdOutStream.once('data', (chunk:Buffer) => { + stream.once('data', (chunk:Buffer) => { // The child process is sending me the `ready` chunk, time to connect to the stdin pipe childProcess.stdin = net.connect(stdInPipeName); // From now on the childProcess.stdout is available for reading - childProcess.stdout = stdOutStream; + childProcess.stdout = stream; resolve(childProcess); }); }); - stdOutServer.listen(stdOutPipeName); + server.listen(stdOutPipeName); var serverClosed = false; var closeServer = () => { @@ -110,8 +100,7 @@ export function fork(modulePath: string, args: string[], options: IForkOptions, return; } serverClosed = true; - stdOutServer.close(); - stdErrServer.close(); + server.close(); }; // Create the process diff --git a/extensions/typescript/src/utils/electronForkStart.ts b/extensions/typescript/src/utils/electronForkStart.ts index 46a12506041..147041bf7d7 100644 --- a/extensions/typescript/src/utils/electronForkStart.ts +++ b/extensions/typescript/src/utils/electronForkStart.ts @@ -26,11 +26,9 @@ var log = (function() { var stdInPipeName = process.env['STDIN_PIPE_NAME']; var stdOutPipeName = process.env['STDOUT_PIPE_NAME']; -var stdErrPipeName = process.env['STDERR_PIPE_NAME']; log('STDIN_PIPE_NAME: ' + stdInPipeName); log('STDOUT_PIPE_NAME: ' + stdOutPipeName); -log('STDERR_PIPE_NAME: ' + stdErrPipeName); log('ATOM_SHELL_INTERNAL_RUN_AS_NODE: ' + process.env['ATOM_SHELL_INTERNAL_RUN_AS_NODE']); // stdout redirection to named pipe @@ -46,14 +44,8 @@ log('ATOM_SHELL_INTERNAL_RUN_AS_NODE: ' + process.env['ATOM_SHELL_INTERNAL_RUN_A // handle process.stdout (process).__defineGetter__('stdout', function() { return stdOutStream; }); - // Create a writing stream to the stderr pipe - var stdErrStream = net.connect(stdErrPipeName); - - // unref stdErrStream to behave like a normal standard out - stdErrStream.unref(); - // handle process.stderr - (process).__defineGetter__('stderr', function() { return stdErrStream; }); + (process).__defineGetter__('stderr', function() { return stdOutStream; }); var fsWriteSyncString = function(fd, str, position, encoding) { // fs.writeSync(fd, string[, position[, encoding]]); @@ -87,18 +79,14 @@ log('ATOM_SHELL_INTERNAL_RUN_AS_NODE: ' + process.env['ATOM_SHELL_INTERNAL_RUN_A slicedBuffer = buffer.slice(off, off + len); } - if (fd === 1) { - stdOutStream.write(slicedBuffer); - } else { - stdErrStream.write(slicedBuffer); - } + stdOutStream.write(slicedBuffer); return slicedBuffer.length; }; // handle fs.writeSync(1, ...) var originalWriteSync = fs.writeSync; fs.writeSync = function(fd, data, position, encoding) { - if (fd !== 1 || fd !== 2) { + if (fd !== 1) { return originalWriteSync.apply(fs, arguments); } // usage: @@ -146,7 +134,6 @@ log('ATOM_SHELL_INTERNAL_RUN_AS_NODE: ' + process.env['ATOM_SHELL_INTERNAL_RUN_A // Unset the custom environmental variables that should not get inherited delete process.env['STDIN_PIPE_NAME']; delete process.env['STDOUT_PIPE_NAME']; - delete process.env['STDERR_PIPE_NAME']; delete process.env['ATOM_SHELL_INTERNAL_RUN_AS_NODE']; require(program); diff --git a/src/vs/base/node/stdFork.ts b/src/vs/base/node/stdFork.ts index 4751a8fa83b..cb5a510491a 100644 --- a/src/vs/base/node/stdFork.ts +++ b/src/vs/base/node/stdFork.ts @@ -38,7 +38,7 @@ function generatePipeName(): string { return path.join(os.tmpdir(), randomName + '.sock'); } -function generatePatchedEnv(env:any, stdInPipeName:string, stdOutPipeName:string, stdErrPipeName:string): any { +function generatePatchedEnv(env:any, stdInPipeName:string, stdOutPipeName:string): any { // Set the two unique pipe names and the electron flag as process env let newEnv:any = {}; @@ -48,7 +48,6 @@ function generatePatchedEnv(env:any, stdInPipeName:string, stdOutPipeName:string newEnv['STDIN_PIPE_NAME'] = stdInPipeName; newEnv['STDOUT_PIPE_NAME'] = stdOutPipeName; - newEnv['STDERR_PIPE_NAME'] = stdErrPipeName; newEnv['ATOM_SHELL_INTERNAL_RUN_AS_NODE'] = '1'; return newEnv; @@ -72,37 +71,29 @@ export function fork(modulePath: string, args: string[], options: IForkOpts, cal callback(err, null); }; - // Generate three unique pipe names + // Generate two unique pipe names let stdInPipeName = generatePipeName(); let stdOutPipeName = generatePipeName(); - let stdErrPipeName = generatePipeName(); - let newEnv = generatePatchedEnv(options.env || process.env, stdInPipeName, stdOutPipeName, stdErrPipeName); + let newEnv = generatePatchedEnv(options.env || process.env, stdInPipeName, stdOutPipeName); let childProcess: cp.ChildProcess; - // Begin listening to stderr pipe - let stdErrServer = net.createServer((stdErrStream) => { - // From now on the childProcess.stderr is available for reading - childProcess.stderr = stdErrStream; - }); - stdErrServer.listen(stdErrPipeName); - // Begin listening to stdout pipe - let stdOutServer = net.createServer((stdOutStream) => { + let server = net.createServer((stream) => { // The child process will write exactly one chunk with content `ready` when it has installed a listener to the stdin pipe - stdOutStream.once('data', (chunk:Buffer) => { + stream.once('data', (chunk:Buffer) => { // The child process is sending me the `ready` chunk, time to connect to the stdin pipe childProcess.stdin = net.connect(stdInPipeName); // From now on the childProcess.stdout is available for reading - childProcess.stdout = stdOutStream; + childProcess.stdout = stream; resolve(childProcess); }); }); - stdOutServer.listen(stdOutPipeName); + server.listen(stdOutPipeName); let serverClosed = false; let closeServer = () => { @@ -110,8 +101,7 @@ export function fork(modulePath: string, args: string[], options: IForkOpts, cal return; } serverClosed = true; - stdOutServer.close(); - stdErrServer.close(); + server.close(); }; // Create the process diff --git a/src/vs/base/node/stdForkStart.js b/src/vs/base/node/stdForkStart.js index dd543b81aec..bb58479fcd8 100644 --- a/src/vs/base/node/stdForkStart.js +++ b/src/vs/base/node/stdForkStart.js @@ -28,11 +28,9 @@ var log = (function() { var stdInPipeName = process.env['STDIN_PIPE_NAME']; var stdOutPipeName = process.env['STDOUT_PIPE_NAME']; -var stdErrPipeName = process.env['STDERR_PIPE_NAME']; log('STDIN_PIPE_NAME: ' + stdInPipeName); log('STDOUT_PIPE_NAME: ' + stdOutPipeName); -log('STDERR_PIPE_NAME: ' + stdErrPipeName); log('ATOM_SHELL_INTERNAL_RUN_AS_NODE: ' + process.env['ATOM_SHELL_INTERNAL_RUN_AS_NODE']); // stdout redirection to named pipe @@ -48,14 +46,8 @@ log('ATOM_SHELL_INTERNAL_RUN_AS_NODE: ' + process.env['ATOM_SHELL_INTERNAL_RUN_A // handle process.stdout process.__defineGetter__('stdout', function() { return stdOutStream; }); - // Create a writing stream to the stderr pipe - var stdErrStream = net.connect(stdErrPipeName); - - // unref stdErrStream to behave like a normal standard out - stdErrStream.unref(); - // handle process.stderr - process.__defineGetter__('stderr', function() { return stdErrStream; }); + process.__defineGetter__('stderr', function() { return stdOutStream; }); var fsWriteSyncString = function(fd, str, position, encoding) { // fs.writeSync(fd, string[, position[, encoding]]); @@ -89,18 +81,14 @@ log('ATOM_SHELL_INTERNAL_RUN_AS_NODE: ' + process.env['ATOM_SHELL_INTERNAL_RUN_A slicedBuffer = buffer.slice(off, off + len); } - if (fd === 1) { - stdOutStream.write(slicedBuffer); - } else { - stdErrStream.write(slicedBuffer); - } + stdOutStream.write(slicedBuffer); return slicedBuffer.length; }; // handle fs.writeSync(1, ...) var originalWriteSync = fs.writeSync; fs.writeSync = function(fd, data, position, encoding) { - if (fd !== 1 || fd !== 2) { + if (fd !== 1) { return originalWriteSync.apply(fs, arguments); } // usage: @@ -148,7 +136,6 @@ log('ATOM_SHELL_INTERNAL_RUN_AS_NODE: ' + process.env['ATOM_SHELL_INTERNAL_RUN_A // Unset the custom environmental variables that should not get inherited delete process.env['STDIN_PIPE_NAME']; delete process.env['STDOUT_PIPE_NAME']; - delete process.env['STDERR_PIPE_NAME']; delete process.env['ATOM_SHELL_INTERNAL_RUN_AS_NODE']; require(program); -- GitLab