diff options
author | arcadia-devtools <arcadia-devtools@yandex-team.ru> | 2022-03-23 11:28:01 +0300 |
---|---|---|
committer | arcadia-devtools <arcadia-devtools@yandex-team.ru> | 2022-03-23 11:28:01 +0300 |
commit | bf160fca0164c4407b7f29aeb0cbf68745b71f61 (patch) | |
tree | 717fd99f6d40f4b707207cb551a4a57ba71e0684 /build/scripts/run_msvc_wine.py | |
parent | 12db7f172fd48ffead86b19bff5653a0aaffd0c8 (diff) | |
download | ydb-bf160fca0164c4407b7f29aeb0cbf68745b71f61.tar.gz |
intermediate changes
ref:ebdff8c3d54500ffd2411bb148bf63da1d0f4b77
Diffstat (limited to 'build/scripts/run_msvc_wine.py')
-rw-r--r-- | build/scripts/run_msvc_wine.py | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/build/scripts/run_msvc_wine.py b/build/scripts/run_msvc_wine.py index 439d1f8831..69c53068e2 100644 --- a/build/scripts/run_msvc_wine.py +++ b/build/scripts/run_msvc_wine.py @@ -31,6 +31,30 @@ def run_subprocess(*args, **kwargs): return p +def run_subprocess_with_timeout(timeout, args): + attempts_remaining = 5 + delay = 1 + p = None + while True: + try: + p = run_subprocess(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + stdout, stderr = p.communicate(timeout=timeout) + return p, stdout, stderr + except subprocess.TimeoutExpired as e: + print >>sys.stderr, 'timeout running {0}, error {1}, delay {2} seconds'.format(args, str(e), delay) + if p is not None: + try: + p.kill() + p.communicate() + except Exception: + pass + attempts_remaining -= 1 + if attempts_remaining == 0: + raise + time.sleep(delay) + delay = min(2 * delay, 4) + + def terminate_slaves(): for p in procs: try: @@ -319,16 +343,14 @@ def colorize(out): def trim_path(path, winepath): - p1 = run_subprocess([winepath, '-w', path], stdout=subprocess.PIPE, stderr=subprocess.PIPE) - p1_stdout, p1_stderr = p1.communicate() + p1, p1_stdout, p1_stderr = run_subprocess_with_timeout(60, [winepath, '-w', path]) win_path = p1_stdout.strip() if p1.returncode != 0 or not win_path: # Fall back to only winepath -s win_path = path - p2 = run_subprocess([winepath, '-s', win_path], stdout=subprocess.PIPE, stderr=subprocess.PIPE) - p2_stdout, p2_stderr = p2.communicate() + p2, p2_stdout, p2_stderr = run_subprocess_with_timeout(60, [winepath, '-s', win_path]) short_path = p2_stdout.strip() check_path = short_path |