Issue #23485: Fix test_signal, select.select() now retries the syscall if the

signal handler does not raise an exception
This commit is contained in:
Victor Stinner 2015-03-30 22:09:14 +02:00
parent 9b16666f2f
commit 749a6a85c6
1 changed files with 17 additions and 3 deletions

View File

@ -418,13 +418,20 @@ class WakeupSignalTests(unittest.TestCase):
TIMEOUT_FULL = 10
TIMEOUT_HALF = 5
class InterruptSelect(Exception):
pass
def handler(signum, frame):
raise InterruptSelect
signal.signal(signal.SIGALRM, handler)
signal.alarm(1)
# We attempt to get a signal during the sleep,
# before select is called
try:
select.select([], [], [], TIMEOUT_FULL)
except InterruptedError:
except InterruptSelect:
pass
else:
raise Exception("select() was not interrupted")
@ -445,15 +452,22 @@ class WakeupSignalTests(unittest.TestCase):
TIMEOUT_FULL = 10
TIMEOUT_HALF = 5
class InterruptSelect(Exception):
pass
def handler(signum, frame):
raise InterruptSelect
signal.signal(signal.SIGALRM, handler)
signal.alarm(1)
before_time = time.monotonic()
# We attempt to get a signal during the select call
try:
select.select([read], [], [], TIMEOUT_FULL)
except OSError:
except InterruptSelect:
pass
else:
raise Exception("OSError not raised")
raise Exception("select() was not interrupted")
after_time = time.monotonic()
dt = after_time - before_time
if dt >= TIMEOUT_HALF: