]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.13] gh-129643: Fix `PyList_Insert` in free-threading builds (GH-129680) (#129725)
authorsobolevn <mail@sobolevn.me>
Thu, 6 Feb 2025 13:22:41 +0000 (16:22 +0300)
committerGitHub <noreply@github.com>
Thu, 6 Feb 2025 13:22:41 +0000 (13:22 +0000)
(cherry picked from commit 63f0406d5ad25a55e49c3903b29407c50a17cfd5)

Misc/NEWS.d/next/Core and Builtins/2025-02-05-11-29-52.gh-issue-129643.4mGzvg.rst [new file with mode: 0644]
Objects/listobject.c

diff --git a/Misc/NEWS.d/next/Core and Builtins/2025-02-05-11-29-52.gh-issue-129643.4mGzvg.rst b/Misc/NEWS.d/next/Core and Builtins/2025-02-05-11-29-52.gh-issue-129643.4mGzvg.rst
new file mode 100644 (file)
index 0000000..420e1fb
--- /dev/null
@@ -0,0 +1 @@
+Fix thread safety of :c:func:`PyList_Insert` in free-threading builds.
index d581fc8b0b290cc0e2ddd7ab66727d80cca3f4e9..65a8b06d978df44d4adb55e4a78891ca054b21ef 100644 (file)
@@ -498,8 +498,8 @@ ins1(PyListObject *self, Py_ssize_t where, PyObject *v)
         where = n;
     items = self->ob_item;
     for (i = n; --i >= where; )
-        items[i+1] = items[i];
-    items[where] = Py_NewRef(v);
+        FT_ATOMIC_STORE_PTR_RELAXED(items[i+1], items[i]);
+    FT_ATOMIC_STORE_PTR_RELEASE(items[where], Py_NewRef(v));
     return 0;
 }