From 722d6418c8285b48b172679f48ddf202f2430ce2 Mon Sep 17 00:00:00 2001 From: jesopo Date: Fri, 30 Aug 2019 18:36:48 +0100 Subject: [PATCH] switch to using signal.setitimer so we can restore previous timer --- src/utils/__init__.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/utils/__init__.py b/src/utils/__init__.py index 719065c0..6c1b90b0 100644 --- a/src/utils/__init__.py +++ b/src/utils/__init__.py @@ -353,9 +353,15 @@ def _raise_deadline(): def deadline(seconds: int=10): old_handler = signal.signal(signal.SIGALRM, lambda _1, _2: _raise_deadline()) - signal.alarm(seconds) + old_seconds, _ = signal.setitimer(signal.ITIMER_REAL, seconds, 0) + + if not old_seconds == 0.0 and seconds > old_seconds: + raise ValueError( + "Deadline timeout larger than parent deadline (%s > %s)" % + (seconds, old_seconds)) try: yield finally: signal.signal(signal.SIGALRM, old_handler) + signal.setitimer(signal.ITIMER_REAL, old_seconds, 0)