From 80aafaf29033499822263101d780b6e25d70566c Mon Sep 17 00:00:00 2001 From: Avery Pennarun Date: Sat, 17 Nov 2018 10:21:11 -0500 Subject: [PATCH] Use signal.setitimer instead of signal.alarm. This gives us more precise timeouts, so that when _try_read hits a race condition, we don't suffer as badly. --- jwack.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jwack.py b/jwack.py index 80786b4..a674e1a 100644 --- a/jwack.py +++ b/jwack.py @@ -59,7 +59,7 @@ def _try_read(fd, n): assert(state.is_flushed()) oldh = signal.signal(signal.SIGALRM, _timeout) try: - signal.alarm(1) # emergency fallback + signal.setitimer(signal.ITIMER_REAL, 0.01, 0.01) # emergency fallback try: b = os.read(_fds[0], 1) except OSError, e: @@ -69,7 +69,7 @@ def _try_read(fd, n): else: raise finally: - signal.alarm(0) + signal.setitimer(signal.ITIMER_REAL, 0, 0) signal.signal(signal.SIGALRM, oldh) return b and b or None # None means EOF