Skip to content

Commit b081091

Browse files
[3.13] gh-129643: fix thread safety of PyList_SetItem (#129644) (#129677)
gh-129643: fix thread safety of `PyList_SetItem` (#129644)
1 parent 4f02615 commit b081091

File tree

2 files changed

+4
-3
lines changed

2 files changed

+4
-3
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fix thread safety of :c:func:`PyList_SetItem` in free-threading builds. Patch by Kumar Aditya.

Objects/listobject.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,6 @@ int
451451
PyList_SetItem(PyObject *op, Py_ssize_t i,
452452
PyObject *newitem)
453453
{
454-
PyObject **p;
455454
if (!PyList_Check(op)) {
456455
Py_XDECREF(newitem);
457456
PyErr_BadInternalCall();
@@ -467,8 +466,9 @@ PyList_SetItem(PyObject *op, Py_ssize_t i,
467466
ret = -1;
468467
goto end;
469468
}
470-
p = self->ob_item + i;
471-
Py_XSETREF(*p, newitem);
469+
PyObject *tmp = self->ob_item[i];
470+
FT_ATOMIC_STORE_PTR_RELEASE(self->ob_item[i], newitem);
471+
Py_XDECREF(tmp);
472472
ret = 0;
473473
end:;
474474
Py_END_CRITICAL_SECTION();

0 commit comments

Comments
 (0)