| Index: gclient_utils.py
|
| diff --git a/gclient_utils.py b/gclient_utils.py
|
| index 556018105cc8cd0c30e42f0ec6e235efbe900eeb..794fc023bb21ed1c59797be895424461bb787c4d 100644
|
| --- a/gclient_utils.py
|
| +++ b/gclient_utils.py
|
| @@ -466,15 +466,13 @@
|
| # TODO(tandrii): we really want to make use of subprocess42 here, and not
|
| # re-invent the wheel, but it's too much work :(
|
|
|
| - def __init__(self, timeout, child, child_info):
|
| + def __init__(self, timeout, child):
|
| self._timeout = timeout
|
| self._child = child
|
| - self._child_info = child_info
|
|
|
| self._cv = threading.Condition()
|
| # All items below are protected by condition above.
|
| self._kill_at = None
|
| - self._killing_attempted = False
|
| self._working = True
|
| self._thread = None
|
|
|
| @@ -484,10 +482,6 @@
|
| self._thread = threading.Thread(name='_KillTimer', target=self._work)
|
| self._thread.daemon = True
|
| self._thread.start()
|
| -
|
| - @property
|
| - def killing_attempted(self):
|
| - return self._killing_attempted
|
|
|
| def poke(self):
|
| if not self._timeout:
|
| @@ -512,9 +506,8 @@
|
| self._cv.wait(timeout=left)
|
| continue
|
| try:
|
| - logging.warn('killing child %s %s because of no output for %fs',
|
| - self._child.pid, self._child_info, self._timeout)
|
| - self._killing_attempted = True
|
| + logging.warn('killing child %s because of no output for %fs',
|
| + self._child, self._timeout)
|
| self._child.kill()
|
| except OSError:
|
| logging.exception('failed to kill child %s', self._child)
|
| @@ -535,8 +528,9 @@
|
| retry: If the process exits non-zero, sleep for a brief interval and try
|
| again, up to RETRY_MAX times.
|
| kill_timeout: (float) if given, number of seconds after which process would
|
| - be killed. Must not be used with shell=True as only shell process
|
| - would be killed, but not processes spawned by shell.
|
| + be killed if there is no output. Must not be used with shell=True as
|
| + only shell process would be killed, but not processes spawned by
|
| + shell.
|
|
|
| stderr is always redirected to stdout.
|
| """
|
| @@ -549,8 +543,6 @@
|
|
|
| sleep_interval = RETRY_INITIAL_SLEEP
|
| run_cwd = kwargs.get('cwd', os.getcwd())
|
| - debug_kid_info = "'%s' in %s" % (' '.join('"%s"' % x for x in args), run_cwd)
|
| -
|
| for _ in xrange(RETRY_MAX + 1):
|
| kid = subprocess2.Popen(
|
| args, bufsize=0, stdout=subprocess2.PIPE, stderr=subprocess2.STDOUT,
|
| @@ -566,13 +558,14 @@
|
| # normally buffering is done for each line, but if svn requests input, no
|
| # end-of-line character is output after the prompt and it would not show up.
|
| try:
|
| - timeout_killer = _KillTimer(kill_timeout, kid, debug_kid_info)
|
| + timeout_killer = _KillTimer(kill_timeout, kid)
|
| in_byte = kid.stdout.read(1)
|
| if in_byte:
|
| if call_filter_on_first_line:
|
| filter_fn(None)
|
| in_line = ''
|
| while in_byte:
|
| + timeout_killer.poke()
|
| output.write(in_byte)
|
| if print_stdout:
|
| stdout.write(in_byte)
|
| @@ -601,12 +594,8 @@
|
| return output.getvalue()
|
| if not retry:
|
| break
|
| - print ("WARNING: subprocess %s failed; will retry after a short nap..." %
|
| - debug_kid_info)
|
| - if timeout_killer.killing_attempted:
|
| - print('The subprocess above was likely killed because it looked hung. '
|
| - 'Output thus far:\n> %s' %
|
| - ('\n> '.join(output.getvalue().splitlines())))
|
| + print ("WARNING: subprocess '%s' in %s failed; will retry after a short "
|
| + 'nap...' % (' '.join('"%s"' % x for x in args), run_cwd))
|
| time.sleep(sleep_interval)
|
| sleep_interval *= 2
|
| raise subprocess2.CalledProcessError(
|
|
|