diff options
author | Victor Stinner <victor.stinner@haypocalc.com> | 2011-05-04 10:38:03 (GMT) |
---|---|---|
committer | Victor Stinner <victor.stinner@haypocalc.com> | 2011-05-04 10:38:03 (GMT) |
commit | 6fd49e152ae173e4f89d5d547b828fa8af4072f2 (patch) | |
tree | 04f24c7b37ca71bf782cba88dee378fd442fd880 /Lib/test | |
parent | 55b5fa76a73c6c1cddec649846faf6bad0f2cfd6 (diff) | |
download | cpython-6fd49e152ae173e4f89d5d547b828fa8af4072f2.zip cpython-6fd49e152ae173e4f89d5d547b828fa8af4072f2.tar.gz cpython-6fd49e152ae173e4f89d5d547b828fa8af4072f2.tar.bz2 |
Issue #11998, issue #8407: workaround _tkinter issue in test_signal
The _tkinter module loads the Tcl library which creates a thread waiting events
in select(). This thread receives signals blocked by all other threads. We
cannot test blocked signals if the _tkinter module is loaded.
Diffstat (limited to 'Lib/test')
-rw-r--r-- | Lib/test/test_signal.py | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/Lib/test/test_signal.py b/Lib/test/test_signal.py index 0a43fa7..338d6ab 100644 --- a/Lib/test/test_signal.py +++ b/Lib/test/test_signal.py @@ -517,6 +517,15 @@ class PthreadSigmaskTests(unittest.TestCase): # function. faulthandler.cancel_dump_tracebacks_later() + # Issue #11998: The _tkinter module loads the Tcl library which creates + # a thread waiting events in select(). This thread receives signals + # blocked by all other threads. We cannot test blocked signals if the + # _tkinter module is loaded. + can_test_blocked_signals = ('_tkinter' not in sys.modules) + if not can_test_blocked_signals: + print("WARNING: _tkinter is loaded, cannot test signals " + "blocked by pthread_sigmask() (issue #11998)") + # Install our signal handler old_handler = signal.signal(signum, handler) self.addCleanup(signal.signal, signum, old_handler) @@ -530,7 +539,8 @@ class PthreadSigmaskTests(unittest.TestCase): # Block and then raise SIGUSR1. The signal is blocked: the signal # handler is not called, and the signal is now pending signal.pthread_sigmask(signal.SIG_BLOCK, [signum]) - os.kill(pid, signum) + if can_test_blocked_signals: + os.kill(pid, signum) # Check the new mask blocked = read_sigmask() @@ -538,8 +548,11 @@ class PthreadSigmaskTests(unittest.TestCase): self.assertEqual(set(old_mask) ^ set(blocked), {signum}) # Unblock SIGUSR1 - with self.assertRaises(ZeroDivisionError): - # unblock the pending signal calls immediatly the signal handler + if can_test_blocked_signals: + with self.assertRaises(ZeroDivisionError): + # unblock the pending signal calls immediatly the signal handler + signal.pthread_sigmask(signal.SIG_UNBLOCK, [signum]) + else: signal.pthread_sigmask(signal.SIG_UNBLOCK, [signum]) with self.assertRaises(ZeroDivisionError): os.kill(pid, signum) |