]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Add enough debugging information to diagnose failures where the
authorJeffrey Yasskin <jyasskin@gmail.com>
Sun, 6 Apr 2008 23:04:28 +0000 (23:04 +0000)
committerJeffrey Yasskin <jyasskin@gmail.com>
Sun, 6 Apr 2008 23:04:28 +0000 (23:04 +0000)
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.

Lib/test/test_signal.py

index 5cbf7a8765415b8aba4fe9c3e750f83230f3679e..64c9cdaa01e874546523bd494fa8a8c5b2724ca3 100644 (file)
@@ -48,16 +48,21 @@ class InterProcessSignalTests(unittest.TestCase):
         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 @@ class InterProcessSignalTests(unittest.TestCase):
         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.