Index: runtime/bin/process_patch.dart |
diff --git a/runtime/bin/process_patch.dart b/runtime/bin/process_patch.dart |
index d1883818d11b115b0f2520cb4e7302024300432d..1cc2bb5d2ff8cea441cd7a3d2a8a52637a9c3c24 100644 |
--- a/runtime/bin/process_patch.dart |
+++ b/runtime/bin/process_patch.dart |
@@ -22,14 +22,14 @@ patch class Process { |
Map<String, String> environment, |
bool includeParentEnvironment: true, |
bool runInShell: false, |
- bool detach: false}) { |
+ ProcessStartMode mode: ProcessStartMode.NORMAL}) { |
_ProcessImpl process = new _ProcessImpl(executable, |
arguments, |
workingDirectory, |
environment, |
includeParentEnvironment, |
runInShell, |
- detach); |
+ mode); |
return process._start(); |
} |
@@ -176,7 +176,7 @@ class _ProcessImpl extends _ProcessImplNativeWrapper with _ServiceObject |
Map<String, String> environment, |
bool includeParentEnvironment, |
bool runInShell, |
- bool detach) : super() { |
+ ProcessStartMode mode) : super() { |
_processes[_serviceId] = this; |
if (runInShell) { |
arguments = _getShellArguments(path, arguments); |
@@ -233,13 +233,12 @@ class _ProcessImpl extends _ProcessImplNativeWrapper with _ServiceObject |
}); |
} |
- if (detach is !bool) { |
- throw new ArgumentError("Detach is not a boolean: $detach"); |
+ if (mode is !ProcessStartMode) { |
+ throw new ArgumentError("Mode is not a ProcessStartMode: $mode"); |
} |
- _detach = detach; |
+ _mode = mode; |
- |
- if (!detach) { |
+ if (mode != ProcessStartMode.DETACHED) { |
// stdin going to process. |
_stdin = new _StdSink(new _Socket._writePipe()); |
_stdin._sink._owner = this; |
@@ -249,6 +248,8 @@ class _ProcessImpl extends _ProcessImplNativeWrapper with _ServiceObject |
// stderr coming from process. |
_stderr = new _StdStream(new _Socket._readPipe()); |
_stderr._stream._owner = this; |
+ } |
+ if (mode == ProcessStartMode.NORMAL) { |
_exitHandler = new _Socket._readPipe(); |
} |
_ended = false; |
@@ -374,7 +375,7 @@ class _ProcessImpl extends _ProcessImplNativeWrapper with _ServiceObject |
Future<Process> _start() { |
var completer = new Completer(); |
- if (!_detach) { |
+ if (_mode == ProcessStartMode.NORMAL) { |
_exitCode = new Completer<int>(); |
} |
// TODO(ager): Make the actual process starting really async instead of |
@@ -386,11 +387,15 @@ class _ProcessImpl extends _ProcessImplNativeWrapper with _ServiceObject |
_arguments, |
_workingDirectory, |
_environment, |
- _detach, |
- _detach ? null : _stdin._sink._nativeSocket, |
- _detach ? null : _stdout._stream._nativeSocket, |
- _detach ? null : _stderr._stream._nativeSocket, |
- _detach ? null : _exitHandler._nativeSocket, |
+ _mode.index, |
+ _mode == ProcessStartMode.DETACHED |
+ ? null : _stdin._sink._nativeSocket, |
+ _mode == ProcessStartMode.DETACHED |
+ ? null : _stdout._stream._nativeSocket, |
+ _mode == ProcessStartMode.DETACHED |
+ ? null : _stderr._stream._nativeSocket, |
+ _mode != ProcessStartMode.NORMAL |
+ ? null : _exitHandler._nativeSocket, |
status); |
if (!success) { |
completer.completeError( |
@@ -405,7 +410,7 @@ class _ProcessImpl extends _ProcessImplNativeWrapper with _ServiceObject |
// Setup an exit handler to handle internal cleanup and possible |
// callback when a process terminates. |
- if (!_detach) { |
+ if (_mode == ProcessStartMode.NORMAL) { |
int exitDataRead = 0; |
final int EXIT_DATA_SIZE = 8; |
List<int> exitDataBuffer = new List<int>(EXIT_DATA_SIZE); |
@@ -448,7 +453,7 @@ class _ProcessImpl extends _ProcessImplNativeWrapper with _ServiceObject |
_arguments, |
_workingDirectory, |
_environment, |
- false, |
+ ProcessStartMode.NORMAL.index, |
_stdin._sink._nativeSocket, |
_stdout._stream._nativeSocket, |
_stderr._stream._nativeSocket, |
@@ -485,7 +490,7 @@ class _ProcessImpl extends _ProcessImplNativeWrapper with _ServiceObject |
List<String> arguments, |
String workingDirectory, |
List<String> environment, |
- bool detach, |
+ int mode, |
_NativeSocket stdin, |
_NativeSocket stdout, |
_NativeSocket stderr, |
@@ -529,7 +534,7 @@ class _ProcessImpl extends _ProcessImplNativeWrapper with _ServiceObject |
List<String> _arguments; |
String _workingDirectory; |
List<String> _environment; |
- bool _detach; |
+ ProcessStartMode _mode; |
// Private methods of Socket are used by _in, _out, and _err. |
_StdSink _stdin; |
_StdStream _stdout; |
@@ -608,7 +613,7 @@ ProcessResult _runNonInteractiveProcessSync( |
environment, |
includeParentEnvironment, |
runInShell, |
- false); |
+ ProcessStartMode.NORMAL); |
return process._runAndWait(stdoutEncoding, stderrEncoding); |
} |