* [3.13] GH-100964: Fix reference cycle in exhausted generator frames (GH-141112)
(cherry picked from commit
92243dc62ce10715ab0d9074b23dea5a1bfa9dcc)
Co-authored-by: Savannah Ostrowski <savannah@python.org>
gen.send(2)
self.assertEqual(cm.exception.value, 2)
+ def test_exhausted_generator_frame_cycle(self):
+ def g():
+ yield
+
+ generator = g()
+ frame = generator.gi_frame
+ self.assertIsNone(frame.f_back)
+ next(generator)
+ self.assertIsNone(frame.f_back)
+ next(generator, None)
+ self.assertIsNone(frame.f_back)
+
class GeneratorTest(unittest.TestCase):
--- /dev/null
+Fix reference cycle in exhausted generator frames. Patch by Savannah Ostrowski.
gen->gi_exc_state.previous_item = NULL;
tstate->c_recursion_remaining--;
assert(frame->frame_obj == NULL || frame->frame_obj->f_frame == frame);
+ frame->previous = NULL;
_PyFrame_ClearExceptCode(frame);
_PyErr_ClearExcState(&gen->gi_exc_state);
tstate->c_recursion_remaining++;
- frame->previous = NULL;
}
void