summaryrefslogtreecommitdiffstats
path: root/Lib/test/eintrdata/eintr_tester.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/test/eintrdata/eintr_tester.py')
-rw-r--r--Lib/test/eintrdata/eintr_tester.py38
1 files changed, 37 insertions, 1 deletions
diff --git a/Lib/test/eintrdata/eintr_tester.py b/Lib/test/eintrdata/eintr_tester.py
index 64db2e5..2d2876e 100644
--- a/Lib/test/eintrdata/eintr_tester.py
+++ b/Lib/test/eintrdata/eintr_tester.py
@@ -264,11 +264,47 @@ class TimeEINTRTest(EINTRBaseTest):
self.assertGreaterEqual(dt, self.sleep_time)
+@unittest.skipUnless(hasattr(signal, "setitimer"), "requires setitimer()")
+class SignalEINTRTest(EINTRBaseTest):
+ """ EINTR tests for the signal module. """
+
+ def test_sigtimedwait(self):
+ t0 = time.monotonic()
+ signal.sigtimedwait([], self.sleep_time)
+ dt = time.monotonic() - t0
+ self.assertGreaterEqual(dt, self.sleep_time)
+
+ def test_sigwaitinfo(self):
+ signum = signal.SIGUSR1
+ pid = os.getpid()
+
+ old_handler = signal.signal(signum, lambda *args: None)
+ self.addCleanup(signal.signal, signum, old_handler)
+
+ t0 = time.monotonic()
+ child_pid = os.fork()
+ if child_pid == 0:
+ # child
+ try:
+ self._sleep()
+ os.kill(pid, signum)
+ finally:
+ os._exit(0)
+ else:
+ # parent
+ signal.sigwaitinfo([signum])
+ dt = time.monotonic() - t0
+ os.waitpid(child_pid, 0)
+
+ self.assertGreaterEqual(dt, self.sleep_time)
+
+
def test_main():
support.run_unittest(
OSEINTRTest,
SocketEINTRTest,
- TimeEINTRTest)
+ TimeEINTRTest,
+ SignalEINTRTest)
if __name__ == "__main__":