aboutsummaryrefslogtreecommitdiffstats
path: root/build/scripts/run_msvc_wine.py
diff options
context:
space:
mode:
authorarcadia-devtools <arcadia-devtools@yandex-team.ru>2022-03-23 11:28:01 +0300
committerarcadia-devtools <arcadia-devtools@yandex-team.ru>2022-03-23 11:28:01 +0300
commitbf160fca0164c4407b7f29aeb0cbf68745b71f61 (patch)
tree717fd99f6d40f4b707207cb551a4a57ba71e0684 /build/scripts/run_msvc_wine.py
parent12db7f172fd48ffead86b19bff5653a0aaffd0c8 (diff)
downloadydb-bf160fca0164c4407b7f29aeb0cbf68745b71f61.tar.gz
intermediate changes
ref:ebdff8c3d54500ffd2411bb148bf63da1d0f4b77
Diffstat (limited to 'build/scripts/run_msvc_wine.py')
-rw-r--r--build/scripts/run_msvc_wine.py30
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