* bpo-45813: Drop redundant assertion from frame.clear()
* Move assertion to frame_dealloc()
return 'end'
self.assertEqual(run_async(run_gen()), ([], 'end'))
- def test_bpo_45813(self):
+ def test_bpo_45813_1(self):
'This would crash the interpreter in 3.11a2'
async def f():
pass
- frame = f().cr_frame
+ with self.assertWarns(RuntimeWarning):
+ frame = f().cr_frame
frame.clear()
+ def test_bpo_45813_2(self):
+ 'This would crash the interpreter in 3.11a2'
+ async def f():
+ pass
+ gen = f()
+ with self.assertWarns(RuntimeWarning):
+ gen.cr_frame.clear()
+
class CoroAsyncIOCompatTest(unittest.TestCase):
static void
frame_dealloc(PyFrameObject *f)
{
+ /* It is the responsibility of the owning generator/coroutine
+ * to have cleared the generator pointer */
+ assert(f->f_frame->generator == NULL);
+
if (_PyObject_GC_IS_TRACKED(f)) {
_PyObject_GC_UNTRACK(f);
}
}
if (f->f_frame->generator) {
_PyGen_Finalize(f->f_frame->generator);
- assert(f->f_frame->generator == NULL);
}
(void)frame_tp_clear(f);
Py_RETURN_NONE;