[Python-checkins] cpython: Issue #11998, issue #8407: workaround _tkinter issue in test_signal
victor.stinner
python-checkins at python.org
Wed May 4 12:38:18 CEST 2011
http://hg.python.org/cpython/rev/88dca05ed468
changeset: 69820:88dca05ed468
user: Victor Stinner <victor.stinner at haypocalc.com>
date: Wed May 04 12:38:03 2011 +0200
summary:
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.
files:
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
--- a/Lib/test/test_signal.py
+++ b/Lib/test/test_signal.py
@@ -517,6 +517,15 @@
# 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 @@
# 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 @@
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)
--
Repository URL: http://hg.python.org/cpython
More information about the Python-checkins
mailing list