Skip to content

Commit 95e271b

Browse files
authored
GH-96612: Skip incomplete frames in tracemalloc traces. (GH-96613)
1 parent f0d9136 commit 95e271b

File tree

3 files changed

+23
-3
lines changed

3 files changed

+23
-3
lines changed

Lib/test/test_tracemalloc.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -360,6 +360,20 @@ def test_fork(self):
360360
else:
361361
support.wait_process(pid, exitcode=0)
362362

363+
def test_no_incomplete_frames(self):
364+
tracemalloc.stop()
365+
tracemalloc.start(8)
366+
367+
def f(x):
368+
def g():
369+
return x
370+
return g
371+
372+
obj = f(0).__closure__[0]
373+
traceback = tracemalloc.get_object_traceback(obj)
374+
self.assertIn("test_tracemalloc", traceback[-1].filename)
375+
self.assertNotIn("test_tracemalloc", traceback[-2].filename)
376+
363377

364378
class TestSnapshot(unittest.TestCase):
365379
maxDiff = 4000
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Make sure that incomplete frames do not show up in tracemalloc traces.

Modules/_tracemalloc.c

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -400,7 +400,13 @@ traceback_get_frames(traceback_t *traceback)
400400
}
401401

402402
_PyInterpreterFrame *pyframe = tstate->cframe->current_frame;
403-
for (; pyframe != NULL;) {
403+
for (;;) {
404+
while (pyframe && _PyFrame_IsIncomplete(pyframe)) {
405+
pyframe = pyframe->previous;
406+
}
407+
if (pyframe == NULL) {
408+
break;
409+
}
404410
if (traceback->nframe < _Py_tracemalloc_config.max_nframe) {
405411
tracemalloc_get_frame(pyframe, &traceback->frames[traceback->nframe]);
406412
assert(traceback->frames[traceback->nframe].filename != NULL);
@@ -410,8 +416,7 @@ traceback_get_frames(traceback_t *traceback)
410416
traceback->total_nframe++;
411417
}
412418

413-
_PyInterpreterFrame *back = pyframe->previous;
414-
pyframe = back;
419+
pyframe = pyframe->previous;
415420
}
416421
}
417422

0 commit comments

Comments
 (0)