diff options
| author | 2019-08-30 18:36:48 +0100 | |
|---|---|---|
| committer | 2019-08-30 18:36:48 +0100 | |
| commit | 722d6418c8285b48b172679f48ddf202f2430ce2 (patch) | |
| tree | 3afeeb479709acff726f39d610668297bef4aee8 | |
| parent | switch 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__.py | 8 |
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) |
