gh-129643: fix thread safety of `PyList_SetItem` (#129644)
--- /dev/null
+Fix thread safety of :c:func:`PyList_SetItem` in free-threading builds. Patch by Kumar Aditya.
PyList_SetItem(PyObject *op, Py_ssize_t i,
PyObject *newitem)
{
- PyObject **p;
if (!PyList_Check(op)) {
Py_XDECREF(newitem);
PyErr_BadInternalCall();
ret = -1;
goto end;
}
- p = self->ob_item + i;
- Py_XSETREF(*p, newitem);
+ PyObject *tmp = self->ob_item[i];
+ FT_ATOMIC_STORE_PTR_RELEASE(self->ob_item[i], newitem);
+ Py_XDECREF(tmp);
ret = 0;
end:;
Py_END_CRITICAL_SECTION();