diff options
author | Jeffrey Yasskin <jyasskin@gmail.com> | 2008-04-06 23:04:28 (GMT) |
---|---|---|
committer | Jeffrey Yasskin <jyasskin@gmail.com> | 2008-04-06 23:04:28 (GMT) |
commit | ee76777846124bb5b7e08feb488d5bab949c76a5 (patch) | |
tree | a8c82f6d41c671e84331544c01f56c4762357457 /Lib/test/test_signal.py | |
parent | 5a4d66824adeeef2d4d4b1bb4cc6cc9645fae8a0 (diff) | |
download | cpython-ee76777846124bb5b7e08feb488d5bab949c76a5.zip cpython-ee76777846124bb5b7e08feb488d5bab949c76a5.tar.gz cpython-ee76777846124bb5b7e08feb488d5bab949c76a5.tar.bz2 |
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.
Diffstat (limited to 'Lib/test/test_signal.py')
-rw-r--r-- | Lib/test/test_signal.py | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/Lib/test/test_signal.py b/Lib/test/test_signal.py index 5cbf7a8..64c9cda 100644 --- a/Lib/test/test_signal.py +++ b/Lib/test/test_signal.py @@ -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. |