From: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> Date: Wed, 15 Jul 2026 10:42:48 +0000 (+0200) Subject: [3.15] gh-150858: fix data race while changing `__qualname__` of a type object(GH... X-Git-Tag: v3.15.0b4~15 X-Git-Url: http://git.ipfire.org/index.cgi?a=commitdiff_plain;h=5125584767c48e32aef07c4d8f9a29a85e1a03b3;p=thirdparty%2FPython%2Fcpython.git [3.15] gh-150858: fix data race while changing `__qualname__` of a type object(GH-150859) (#153747) gh-150858: fix data race while changing `__qualname__` of a type object(GH-150859) (cherry picked from commit 1ec6596828b0db4317d85afa85e1f68a3551a07e) Co-authored-by: Thomas Kowalski --- diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2026-06-03-16-27-00.gh-issue-150858.j2dSkD.rst b/Misc/NEWS.d/next/Core_and_Builtins/2026-06-03-16-27-00.gh-issue-150858.j2dSkD.rst new file mode 100644 index 000000000000..dcb932bf3206 --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2026-06-03-16-27-00.gh-issue-150858.j2dSkD.rst @@ -0,0 +1 @@ +Fix a data race while changing ``__qualname__`` of a type concurrently on free-threaded builds. diff --git a/Objects/typeobject.c b/Objects/typeobject.c index f763f9f5eba5..8108e8e92731 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -1594,7 +1594,12 @@ type_set_qualname(PyObject *tp, PyObject *value, void *context) } et = (PyHeapTypeObject*)type; - Py_SETREF(et->ht_qualname, Py_NewRef(value)); + PyInterpreterState *interp = _PyInterpreterState_GET(); + _PyEval_StopTheWorld(interp); + PyObject *old_qualname = et->ht_qualname; + et->ht_qualname = Py_NewRef(value); + _PyEval_StartTheWorld(interp); + Py_DECREF(old_qualname); return 0; }