| Index: third_party/android_testrunner/run_command.py
|
| diff --git a/third_party/android_testrunner/run_command.py b/third_party/android_testrunner/run_command.py
|
| index d398daa283b10ffe5baeadde29574d320ca72ce6..812037d9a9eee008b131501b989d02959a0bdb46 100644
|
| --- a/third_party/android_testrunner/run_command.py
|
| +++ b/third_party/android_testrunner/run_command.py
|
| @@ -80,29 +80,28 @@ def RunOnce(cmd, timeout_time=None, return_output=True, stdin_input=None):
|
| """
|
| start_time = time.time()
|
| so = []
|
| - pid = []
|
| global _abort_on_error, error_occurred
|
| error_occurred = False
|
|
|
| + if return_output:
|
| + output_dest = subprocess.PIPE
|
| + else:
|
| + # None means direct to stdout
|
| + output_dest = None
|
| + if stdin_input:
|
| + stdin_dest = subprocess.PIPE
|
| + else:
|
| + stdin_dest = None
|
| + pipe = subprocess.Popen(
|
| + cmd,
|
| + executable='/bin/bash',
|
| + stdin=stdin_dest,
|
| + stdout=output_dest,
|
| + stderr=subprocess.STDOUT,
|
| + shell=True)
|
| +
|
| def Run():
|
| global error_occurred
|
| - if return_output:
|
| - output_dest = subprocess.PIPE
|
| - else:
|
| - # None means direct to stdout
|
| - output_dest = None
|
| - if stdin_input:
|
| - stdin_dest = subprocess.PIPE
|
| - else:
|
| - stdin_dest = None
|
| - pipe = subprocess.Popen(
|
| - cmd,
|
| - executable='/bin/bash',
|
| - stdin=stdin_dest,
|
| - stdout=output_dest,
|
| - stderr=subprocess.STDOUT,
|
| - shell=True)
|
| - pid.append(pipe.pid)
|
| try:
|
| output = pipe.communicate(input=stdin_input)[0]
|
| if output is not None and len(output) > 0:
|
| @@ -119,27 +118,17 @@ def RunOnce(cmd, timeout_time=None, return_output=True, stdin_input=None):
|
|
|
| t = threading.Thread(target=Run)
|
| t.start()
|
| -
|
| - break_loop = False
|
| - while not break_loop:
|
| - if not t.isAlive():
|
| - break_loop = True
|
| -
|
| - # Check the timeout
|
| - if (not break_loop and timeout_time is not None
|
| - and time.time() > start_time + timeout_time):
|
| - try:
|
| - os.kill(pid[0], signal.SIGKILL)
|
| - except OSError:
|
| - # process already dead. No action required.
|
| - pass
|
| -
|
| + t.join(timeout_time)
|
| + if t.isAlive():
|
| + try:
|
| + pipe.kill()
|
| + except OSError:
|
| + # Can't kill a dead process.
|
| + pass
|
| + finally:
|
| logger.SilentLog("about to raise a timeout for: %s" % cmd)
|
| raise errors.WaitForResponseTimedOutError
|
| - if not break_loop:
|
| - time.sleep(0.1)
|
|
|
| - t.join()
|
| output = "".join(so)
|
| if _abort_on_error and error_occurred:
|
| raise errors.AbortError(msg=output)
|
|
|