clear out f_gen during generator finalization (closes #27812)

Patch from Armin Rigo.
This commit is contained in:
Benjamin Peterson 2016-09-05 10:39:57 -07:00
parent 80109d3351
commit bdddb11b0e
2 changed files with 7 additions and 1 deletions

View File

@ -10,6 +10,9 @@ Release date: TBA
Core and Builtins Core and Builtins
----------------- -----------------
- Issue #27812: Properly clear out a generator's frame's backreference to the
generator to prevent crashes in frame.clear().
- Issue #27811: Fix a crash when a coroutine that has not been awaited is - Issue #27811: Fix a crash when a coroutine that has not been awaited is
finalized with warnings-as-errors enabled. finalized with warnings-as-errors enabled.

View File

@ -71,7 +71,10 @@ gen_dealloc(PyGenObject *gen)
return; /* resurrected. :( */ return; /* resurrected. :( */
_PyObject_GC_UNTRACK(self); _PyObject_GC_UNTRACK(self);
Py_CLEAR(gen->gi_frame); if (gen->gi_frame != NULL) {
gen->gi_frame->f_gen = NULL;
Py_CLEAR(gen->gi_frame);
}
Py_CLEAR(gen->gi_code); Py_CLEAR(gen->gi_code);
Py_CLEAR(gen->gi_name); Py_CLEAR(gen->gi_name);
Py_CLEAR(gen->gi_qualname); Py_CLEAR(gen->gi_qualname);