From 19192285b53041f7efb772636adb90bbb19b90e8 Mon Sep 17 00:00:00 2001 From: sobolevn Date: Mon, 13 Jan 2025 10:40:52 +0300 Subject: [PATCH 1/2] gh-128759: fix data race in `type_modified_unlocked` (GH-128764) (cherry picked from commit 6e1e78054060ad326f26dd8dbf12adfedbb52883) Co-authored-by: sobolevn --- Objects/typeobject.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Objects/typeobject.c b/Objects/typeobject.c index 093ebac9b501796..bde118e2cc8abe5 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -996,7 +996,7 @@ type_modified_unlocked(PyTypeObject *type) We don't assign new version tags eagerly, but only as needed. */ - if (type->tp_version_tag == 0) { + if (_Py_atomic_load_uint_relaxed(type->tp_version_tag) == 0) { return; } // Cannot modify static builtin types. From b4b55700fb734fe961570b8c6c5ee5fda3db5c2f Mon Sep 17 00:00:00 2001 From: sobolevn Date: Mon, 13 Jan 2025 11:16:15 +0300 Subject: [PATCH 2/2] Port to 3.13 --- Objects/typeobject.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Objects/typeobject.c b/Objects/typeobject.c index bde118e2cc8abe5..bd79676b8e925fb 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -996,9 +996,15 @@ type_modified_unlocked(PyTypeObject *type) We don't assign new version tags eagerly, but only as needed. */ - if (_Py_atomic_load_uint_relaxed(type->tp_version_tag) == 0) { +#ifdef Py_GIL_DISABLED + if (_Py_atomic_load_uint_relaxed(&type->tp_version_tag) == 0) { + return; + } +#else + if (type->tp_version_tag == 0) { return; } +#endif // Cannot modify static builtin types. assert((type->tp_flags & _Py_TPFLAGS_STATIC_BUILTIN) == 0);