r"^<frame at 0x[0-9a-fA-F]+, file %s, line %d, code inner>$"
% (file_repr, offset + 5))
+class TestIncompleteFrameAreInvisible(unittest.TestCase):
+
+ def test_issue95818(self):
+ #See GH-95818 for details
+ import gc
+ self.addCleanup(gc.set_threshold, *gc.get_threshold())
+
+ gc.set_threshold(1,1,1)
+ class GCHello:
+ def __del__(self):
+ print("Destroyed from gc")
+
+ def gen():
+ yield
+
+ fd = open(__file__)
+ l = [fd, GCHello()]
+ l.append(l)
+ del fd
+ del l
+ gen()
+
if __name__ == "__main__":
unittest.main()
PyThreadState_GetFrame(PyThreadState *tstate)
{
assert(tstate != NULL);
- if (tstate->cframe->current_frame == NULL) {
+ _PyInterpreterFrame *f = tstate->cframe->current_frame;
+ while (f && _PyFrame_IsIncomplete(f)) {
+ f = f->previous;
+ }
+ if (f == NULL) {
return NULL;
}
- PyFrameObject *frame = _PyFrame_GetFrameObject(tstate->cframe->current_frame);
+ PyFrameObject *frame = _PyFrame_GetFrameObject(f);
if (frame == NULL) {
PyErr_Clear();
}