aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar jesopo2019-08-30 18:36:48 +0100
committerGravatar jesopo2019-08-30 18:36:48 +0100
commit722d6418c8285b48b172679f48ddf202f2430ce2 (patch)
tree3afeeb479709acff726f39d610668297bef4aee8
parentswitch utils.deadline to a context manager (diff)
signature
switch to using signal.setitimer so we can restore previous timer
-rw-r--r--src/utils/__init__.py8
1 files changed, 7 insertions, 1 deletions
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)