[Python-checkins] r62194 - python/trunk/Lib/test/test_signal.py

jeffrey.yasskin python-checkins at python.org
Mon Apr 7 01:04:29 CEST 2008


Author: jeffrey.yasskin
Date: Mon Apr  7 01:04:28 2008
New Revision: 62194

Modified:
   python/trunk/Lib/test/test_signal.py
Log:
Add enough debugging information to diagnose failures where the
HandlerBException is ignored, and fix one such problem, where it was thrown
during the __del__ method of the previous Popen object.

We may want to find a better way of printing verbose information so it's not
spammy when the test passes.


Modified: python/trunk/Lib/test/test_signal.py
==============================================================================
--- python/trunk/Lib/test/test_signal.py	(original)
+++ python/trunk/Lib/test/test_signal.py	Mon Apr  7 01:04:28 2008
@@ -48,16 +48,21 @@
         if self.using_gc:
             gc.enable()
 
-    def handlerA(self, *args):
+    def format_frame(self, frame, limit=None):
+        return ''.join(traceback.format_stack(frame, limit=limit))
+
+    def handlerA(self, signum, frame):
         self.a_called = True
         if test_support.verbose:
-            print "handlerA invoked", args
+            print "handlerA invoked from signal %s at:\n%s" % (
+                signum, self.format_frame(frame, limit=1))
 
-    def handlerB(self, *args):
+    def handlerB(self, signum, frame):
         self.b_called = True
         if test_support.verbose:
-            print "handlerB invoked", args
-        raise HandlerBCalled(*args)
+            print "handlerB invoked from signal %s at:\n%s" % (
+                signum, self.format_frame(frame, limit=1))
+        raise HandlerBCalled(signum, self.format_frame(frame))
 
     def wait(self, child):
         """Wait for child to finish, ignoring EINTR."""
@@ -95,6 +100,10 @@
         self.assertFalse(self.b_called)
         self.a_called = False
 
+        # Make sure the signal isn't delivered while the previous
+        # Popen object is being destroyed, because __del__ swallows
+        # exceptions.
+        del child
         try:
             child = subprocess.Popen(['kill', '-USR1', str(pid)])
             # This wait should be interrupted by the signal's exception.


More information about the Python-checkins mailing list