Index: tools/testrunner/local/commands.py |
diff --git a/tools/testrunner/local/commands.py b/tools/testrunner/local/commands.py |
index 4f3dc51e02b20d763e80adb3d65c9e8433ebd21d..d6445d0c7a67838f863cef5b6f2370f32f8790aa 100644 |
--- a/tools/testrunner/local/commands.py |
+++ b/tools/testrunner/local/commands.py |
@@ -64,49 +64,46 @@ def Win32SetErrorMode(mode): |
def RunProcess(verbose, timeout, args, **rest): |
- try: |
- if verbose: print "#", " ".join(args) |
- popen_args = args |
- prev_error_mode = SEM_INVALID_VALUE |
- if utils.IsWindows(): |
- popen_args = subprocess.list2cmdline(args) |
- # Try to change the error mode to avoid dialogs on fatal errors. Don't |
- # touch any existing error mode flags by merging the existing error mode. |
- # See http://blogs.msdn.com/oldnewthing/archive/2004/07/27/198410.aspx. |
- error_mode = SEM_NOGPFAULTERRORBOX |
- prev_error_mode = Win32SetErrorMode(error_mode) |
- Win32SetErrorMode(error_mode | prev_error_mode) |
- process = subprocess.Popen( |
- shell=utils.IsWindows(), |
- args=popen_args, |
- **rest |
- ) |
- if (utils.IsWindows() and prev_error_mode != SEM_INVALID_VALUE): |
- Win32SetErrorMode(prev_error_mode) |
- # Compute the end time - if the process crosses this limit we |
- # consider it timed out. |
- if timeout is None: end_time = None |
- else: end_time = time.time() + timeout |
- timed_out = False |
- # Repeatedly check the exit code from the process in a |
- # loop and keep track of whether or not it times out. |
- exit_code = None |
- sleep_time = INITIAL_SLEEP_TIME |
- while exit_code is None: |
- if (not end_time is None) and (time.time() >= end_time): |
- # Kill the process and wait for it to exit. |
- KillProcessWithID(process.pid) |
- exit_code = process.wait() |
- timed_out = True |
- else: |
- exit_code = process.poll() |
- time.sleep(sleep_time) |
- sleep_time = sleep_time * SLEEP_TIME_FACTOR |
- if sleep_time > MAX_SLEEP_TIME: |
- sleep_time = MAX_SLEEP_TIME |
- return (exit_code, timed_out) |
- except KeyboardInterrupt: |
- raise |
+ if verbose: print "#", " ".join(args) |
+ popen_args = args |
+ prev_error_mode = SEM_INVALID_VALUE |
+ if utils.IsWindows(): |
+ popen_args = subprocess.list2cmdline(args) |
+ # Try to change the error mode to avoid dialogs on fatal errors. Don't |
+ # touch any existing error mode flags by merging the existing error mode. |
+ # See http://blogs.msdn.com/oldnewthing/archive/2004/07/27/198410.aspx. |
+ error_mode = SEM_NOGPFAULTERRORBOX |
+ prev_error_mode = Win32SetErrorMode(error_mode) |
+ Win32SetErrorMode(error_mode | prev_error_mode) |
+ process = subprocess.Popen( |
+ shell=utils.IsWindows(), |
+ args=popen_args, |
+ **rest |
+ ) |
+ if (utils.IsWindows() and prev_error_mode != SEM_INVALID_VALUE): |
+ Win32SetErrorMode(prev_error_mode) |
+ # Compute the end time - if the process crosses this limit we |
+ # consider it timed out. |
+ if timeout is None: end_time = None |
+ else: end_time = time.time() + timeout |
+ timed_out = False |
+ # Repeatedly check the exit code from the process in a |
+ # loop and keep track of whether or not it times out. |
+ exit_code = None |
+ sleep_time = INITIAL_SLEEP_TIME |
+ while exit_code is None: |
+ if (not end_time is None) and (time.time() >= end_time): |
+ # Kill the process and wait for it to exit. |
+ KillProcessWithID(process.pid) |
+ exit_code = process.wait() |
+ timed_out = True |
+ else: |
+ exit_code = process.poll() |
+ time.sleep(sleep_time) |
+ sleep_time = sleep_time * SLEEP_TIME_FACTOR |
+ if sleep_time > MAX_SLEEP_TIME: |
+ sleep_time = MAX_SLEEP_TIME |
+ return (exit_code, timed_out) |
def PrintError(string): |
@@ -142,11 +139,9 @@ def Execute(args, verbose=False, timeout=None): |
stdout=fd_out, |
stderr=fd_err |
) |
- except KeyboardInterrupt: |
- raise |
- except: |
- raise |
finally: |
+ # TODO(machenbach): A keyboard interrupt before the assignment to |
+ # fd_out|err can lead to reference errors here. |
os.close(fd_out) |
os.close(fd_err) |
out = file(outname).read() |