mirror of
https://github.com/python/cpython.git
synced 2024-11-24 02:15:30 +08:00
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:
parent
630db60a55
commit
f879024487
@ -368,7 +368,7 @@ class Profile:
|
||||
"exception": trace_dispatch_exception,
|
||||
"return": trace_dispatch_return,
|
||||
"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,
|
||||
}
|
||||
|
||||
|
@ -10,7 +10,7 @@ from test.test_support import TESTFN, vereq
|
||||
# included in the profile and would appear to consume all the time.)
|
||||
ticks = 0
|
||||
|
||||
def test_main():
|
||||
def test_1():
|
||||
global ticks
|
||||
ticks = 0
|
||||
prof = profile.Profile(timer)
|
||||
@ -95,6 +95,25 @@ def test_2():
|
||||
vereq (x, 1)
|
||||
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__":
|
||||
test_main()
|
||||
test_2()
|
||||
|
Loading…
Reference in New Issue
Block a user