From: Thomas Kowalski Date: Thu, 11 Jun 2026 15:07:36 +0000 (+0200) Subject: gh-150858: fix data race while changing `__qualname__` of a type object(#150859) X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1ec6596828b0db4317d85afa85e1f68a3551a07e;p=thirdparty%2FPython%2Fcpython.git gh-150858: fix data race while changing `__qualname__` of a type object(#150859) --- 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 e0464fe6475c..de5bb5f1f2a0 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; }