summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_signal.py
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2015-03-30 20:09:14 (GMT)
committerVictor Stinner <victor.stinner@gmail.com>2015-03-30 20:09:14 (GMT)
commit749a6a85c645648199eb4e855a9537a8b703ffeb (patch)
treea29d20aaa108a61fbe9ade91921dd90cf579d9eb /Lib/test/test_signal.py
parent9b16666f2f4a9ee1a586f70772cad6ed80419ec5 (diff)
downloadcpython-749a6a85c645648199eb4e855a9537a8b703ffeb.zip
cpython-749a6a85c645648199eb4e855a9537a8b703ffeb.tar.gz
cpython-749a6a85c645648199eb4e855a9537a8b703ffeb.tar.bz2
Issue #23485: Fix test_signal, select.select() now retries the syscall if the
signal handler does not raise an exception
Diffstat (limited to 'Lib/test/test_signal.py')
-rw-r--r--Lib/test/test_signal.py20
1 files changed, 17 insertions, 3 deletions
diff --git a/Lib/test/test_signal.py b/Lib/test/test_signal.py
index 8718eae..65b36de 100644
--- a/Lib/test/test_signal.py
+++ b/Lib/test/test_signal.py
@@ -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: