test and fix for buggy handling of exceptions raised by C functions,

causing the profiler to crash on an AssertionError if the same Python
function catches multiple exceptions from C functions.
This commit is contained in:
Armin Rigo 2005-09-20 18:50:13 +00:00
parent 630db60a55
commit f879024487
2 changed files with 22 additions and 3 deletions

View File

@ -368,7 +368,7 @@ class Profile:
"exception": trace_dispatch_exception, "exception": trace_dispatch_exception,
"return": trace_dispatch_return, "return": trace_dispatch_return,
"c_call": trace_dispatch_c_call, "c_call": trace_dispatch_c_call,
"c_exception": trace_dispatch_exception, "c_exception": trace_dispatch_return, # the C function returned
"c_return": trace_dispatch_return, "c_return": trace_dispatch_return,
} }

View File

@ -10,7 +10,7 @@ from test.test_support import TESTFN, vereq
# included in the profile and would appear to consume all the time.) # included in the profile and would appear to consume all the time.)
ticks = 0 ticks = 0
def test_main(): def test_1():
global ticks global ticks
ticks = 0 ticks = 0
prof = profile.Profile(timer) prof = profile.Profile(timer)
@ -95,6 +95,25 @@ def test_2():
vereq (x, 1) vereq (x, 1)
os.unlink (TESTFN) os.unlink (TESTFN)
def test_3():
result = []
def testfunc1():
try: len(None)
except: pass
try: len(None)
except: pass
result.append(True)
def testfunc2():
testfunc1()
testfunc1()
profile.runctx("testfunc2()", locals(), locals(), TESTFN)
vereq(result, [True, True])
os.unlink(TESTFN)
def test_main():
test_1()
test_2()
test_3()
if __name__ == "__main__": if __name__ == "__main__":
test_main() test_main()
test_2()