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.
This commit is contained in:
parent
d0607d0091
commit
80aafaf290
1 changed files with 2 additions and 2 deletions
4
jwack.py
4
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
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue