Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(563)

Side by Side Diff: runtime/bin/process_patch.dart

Issue 1420443002: Corrects cleanup on an error during Process startup (Closed) Base URL: git@github.com:dart-lang/sdk.git@stable
Patch Set: Don't use the process map at all, but leave the field Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 patch class _WindowsCodePageDecoder { 5 patch class _WindowsCodePageDecoder {
6 /* patch */ static String _decodeBytes(List<int> bytes) 6 /* patch */ static String _decodeBytes(List<int> bytes)
7 native "SystemEncodingToString"; 7 native "SystemEncodingToString";
8 } 8 }
9 9
10 10
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
181 // Use default Map so we keep order. 181 // Use default Map so we keep order.
182 static Map<int, _ProcessImpl> _processes = new Map<int, _ProcessImpl>(); 182 static Map<int, _ProcessImpl> _processes = new Map<int, _ProcessImpl>();
183 183
184 _ProcessImpl(String path, 184 _ProcessImpl(String path,
185 List<String> arguments, 185 List<String> arguments,
186 String this._workingDirectory, 186 String this._workingDirectory,
187 Map<String, String> environment, 187 Map<String, String> environment,
188 bool includeParentEnvironment, 188 bool includeParentEnvironment,
189 bool runInShell, 189 bool runInShell,
190 ProcessStartMode mode) : super() { 190 ProcessStartMode mode) : super() {
191 _processes[_serviceId] = this;
192 if (runInShell) { 191 if (runInShell) {
193 arguments = _getShellArguments(path, arguments); 192 arguments = _getShellArguments(path, arguments);
194 path = _getShellCommand(); 193 path = _getShellCommand();
195 } 194 }
196 195
197 if (path is !String) { 196 if (path is !String) {
198 throw new ArgumentError("Path is not a String: $path"); 197 throw new ArgumentError("Path is not a String: $path");
199 } 198 }
200 _path = path; 199 _path = path;
201 200
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
432 var negative = _intFromBytes(ints, 4); 431 var negative = _intFromBytes(ints, 4);
433 assert(negative == 0 || negative == 1); 432 assert(negative == 0 || negative == 1);
434 return (negative == 0) ? code : -code; 433 return (negative == 0) ? code : -code;
435 } 434 }
436 435
437 void handleExit() { 436 void handleExit() {
438 _ended = true; 437 _ended = true;
439 _exitCode.complete(exitCode(exitDataBuffer)); 438 _exitCode.complete(exitCode(exitDataBuffer));
440 // Kill stdin, helping hand if the user forgot to do it. 439 // Kill stdin, helping hand if the user forgot to do it.
441 _stdin._sink.destroy(); 440 _stdin._sink.destroy();
442 _processes.remove(_serviceId);
443 } 441 }
444 442
445 exitDataBuffer.setRange( 443 exitDataBuffer.setRange(
446 exitDataRead, exitDataRead + data.length, data); 444 exitDataRead, exitDataRead + data.length, data);
447 exitDataRead += data.length; 445 exitDataRead += data.length;
448 if (exitDataRead == EXIT_DATA_SIZE) { 446 if (exitDataRead == EXIT_DATA_SIZE) {
449 handleExit(); 447 handleExit();
450 } 448 }
451 }); 449 });
452 } 450 }
(...skipping 28 matching lines...) Expand all
481 _stdin._sink._nativeSocket, 479 _stdin._sink._nativeSocket,
482 _stdout._stream._nativeSocket, 480 _stdout._stream._nativeSocket,
483 _stderr._stream._nativeSocket, 481 _stderr._stream._nativeSocket,
484 _exitHandler._nativeSocket); 482 _exitHandler._nativeSocket);
485 483
486 getOutput(output, encoding) { 484 getOutput(output, encoding) {
487 if (encoding == null) return output; 485 if (encoding == null) return output;
488 return encoding.decode(output); 486 return encoding.decode(output);
489 } 487 }
490 488
491 _processes.remove(_serviceId);
492
493 return new ProcessResult( 489 return new ProcessResult(
494 result[0], 490 result[0],
495 result[1], 491 result[1],
496 getOutput(result[2], stdoutEncoding), 492 getOutput(result[2], stdoutEncoding),
497 getOutput(result[3], stderrEncoding)); 493 getOutput(result[3], stderrEncoding));
498 } 494 }
499 495
500 bool _startNative(String path, 496 bool _startNative(String path,
501 List<String> arguments, 497 List<String> arguments,
502 String workingDirectory, 498 String workingDirectory,
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
618 Encoding stderrEncoding) { 614 Encoding stderrEncoding) {
619 var process = new _ProcessImpl(executable, 615 var process = new _ProcessImpl(executable,
620 arguments, 616 arguments,
621 workingDirectory, 617 workingDirectory,
622 environment, 618 environment,
623 includeParentEnvironment, 619 includeParentEnvironment,
624 runInShell, 620 runInShell,
625 ProcessStartMode.NORMAL); 621 ProcessStartMode.NORMAL);
626 return process._runAndWait(stdoutEncoding, stderrEncoding); 622 return process._runAndWait(stdoutEncoding, stderrEncoding);
627 } 623 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698