summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_signal.py
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@haypocalc.com>2011-05-04 10:38:03 (GMT)
committerVictor Stinner <victor.stinner@haypocalc.com>2011-05-04 10:38:03 (GMT)
commit6fd49e152ae173e4f89d5d547b828fa8af4072f2 (patch)
tree04f24c7b37ca71bf782cba88dee378fd442fd880 /Lib/test/test_signal.py
parent55b5fa76a73c6c1cddec649846faf6bad0f2cfd6 (diff)
downloadcpython-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/test_signal.py')
-rw-r--r--Lib/test/test_signal.py19
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)