https://github.com/python/cpython/commit/e76d3333cbfa82e32aa4f8cf0b52d2664e90eb44 commit: e76d3333cbfa82e32aa4f8cf0b52d2664e90eb44 branch: 3.14 author: Miss Islington (bot) <[email protected]> committer: kumaraditya303 <[email protected]> date: 2026-07-25T03:56:33Z summary:
[3.14] GH-153809: Untrack TaskObj from GC before calling unregister_task (GH-154563) (#154666) GH-153809: Untrack TaskObj from GC before calling unregister_task (GH-154563) (cherry picked from commit 506242706e43af85f841027b7bd7f022f8acd939) Co-authored-by: Sergey Miryanov <[email protected]> files: A Misc/NEWS.d/next/Core_and_Builtins/2026-07-24-13-15-31.gh-issue-153809.JFA6GT.rst M Modules/_asynciomodule.c diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2026-07-24-13-15-31.gh-issue-153809.JFA6GT.rst b/Misc/NEWS.d/next/Core_and_Builtins/2026-07-24-13-15-31.gh-issue-153809.JFA6GT.rst new file mode 100644 index 00000000000000..d2d2c771a68432 --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2026-07-24-13-15-31.gh-issue-153809.JFA6GT.rst @@ -0,0 +1,2 @@ +Fix interpreter crash while deallocating objects of :class:`asyncio.Task` on +free-threaded builds. Contributed by Sergey Miryanov. diff --git a/Modules/_asynciomodule.c b/Modules/_asynciomodule.c index 46a55f8b91d387..221c65871424a0 100644 --- a/Modules/_asynciomodule.c +++ b/Modules/_asynciomodule.c @@ -2993,13 +2993,17 @@ TaskObj_dealloc(PyObject *self) if (PyObject_CallFinalizerFromDealloc(self) < 0) { return; // resurrected } + // Untrack the object before unregistering the task, since the + // latter can cause a stop-the-world pause, after which another + // thread might call the GC and reach the object while it is + // semi-deallocated but still tracked + PyObject_GC_UnTrack(self); + // unregister the task after finalization so that // if the task gets resurrected, it remains registered unregister_task((TaskObj *)self); PyTypeObject *tp = Py_TYPE(self); - PyObject_GC_UnTrack(self); - PyObject_ClearWeakRefs(self); (void)TaskObj_clear(self); _______________________________________________ Python-checkins mailing list -- [email protected] To unsubscribe send an email to [email protected] https://mail.python.org/mailman3//lists/python-checkins.python.org Member address: [email protected]
