提交 0a03c66c 编写于 作者: A Andre Weinand

Revert "stdfork respect stderr"

This reverts commit dd7709ec.
上级 0ceed647
......@@ -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 = <any>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
......
......@@ -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
(<any>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
(<any>process).__defineGetter__('stderr', function() { return stdErrStream; });
(<any>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);
......
......@@ -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 = <any>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
......
......@@ -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);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册