[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