]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.14] gh-140431: Fix GC crash due to partially initialized coroutines (gh-140470...
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Thu, 23 Oct 2025 14:44:21 +0000 (16:44 +0200)
committerGitHub <noreply@github.com>
Thu, 23 Oct 2025 14:44:21 +0000 (14:44 +0000)
The `make_gen()` function creates and tracks generator/coro objects, but
doesn't fully initialize all the fields. At a minimum, we need to
initialize all the fields that may be accessed by gen_traverse because
the call to `compute_cr_origin()` can trigger a GC.
(cherry picked from commit 574405c19e9b5de0504be46a3925027ded4495ae)

Co-authored-by: Sam Gross <colesbury@gmail.com>
Misc/NEWS.d/next/Core_and_Builtins/2025-10-22-17-22-22.gh-issue-140431.m8D_A-.rst [new file with mode: 0644]
Objects/genobject.c

diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2025-10-22-17-22-22.gh-issue-140431.m8D_A-.rst b/Misc/NEWS.d/next/Core_and_Builtins/2025-10-22-17-22-22.gh-issue-140431.m8D_A-.rst
new file mode 100644 (file)
index 0000000..3d62d21
--- /dev/null
@@ -0,0 +1,3 @@
+Fix a crash in Python's :term:`garbage collector <garbage collection>` due to
+partially initialized :term:`coroutine` objects when coroutine origin tracking
+depth is enabled (:func:`sys.set_coroutine_origin_tracking_depth`).
index f1fd995a246ed99eb5a2a704ddd71085ef27d043..f429bc47678fedee6deb76c68e6e3ec54a4b5943 100644 (file)
@@ -922,6 +922,7 @@ make_gen(PyTypeObject *type, PyFunctionObject *func)
     gen->gi_weakreflist = NULL;
     gen->gi_exc_state.exc_value = NULL;
     gen->gi_exc_state.previous_item = NULL;
+    gen->gi_iframe.f_executable = PyStackRef_None;
     assert(func->func_name != NULL);
     gen->gi_name = Py_NewRef(func->func_name);
     assert(func->func_qualname != NULL);