Skip to content

Commit

Permalink
pythongh-112087: Make list.extend(dict) behave atomically
Browse files Browse the repository at this point in the history
Add a special case for `list.extend(dict)` and `list(dict)` so that
those patterns behave atomically with respect to modifications to the
list or dictionary.

This is required by multiprocessing, which assumes that
`list(_finalizer_registry)` is atomic.
  • Loading branch information
colesbury committed Apr 1, 2024
1 parent 9dae05e commit a1fa3fb
Showing 1 changed file with 5 additions and 0 deletions.
5 changes: 5 additions & 0 deletions Objects/listobject.c
Original file line number Diff line number Diff line change
Expand Up @@ -1374,6 +1374,11 @@ _list_extend(PyListObject *self, PyObject *iterable)
res = list_extend_set(self, (PySetObject *)iterable);
Py_END_CRITICAL_SECTION2();
}
else if (PyDict_CheckExact(iterable)) {
Py_BEGIN_CRITICAL_SECTION2(self, iterable);
res = list_extend_dict(self, (PyDictObject *)iterable, 0 /*keys*/);
Py_END_CRITICAL_SECTION2();
}
else if (Py_IS_TYPE(iterable, &PyDictKeys_Type)) {
PyDictObject *dict = ((_PyDictViewObject *)iterable)->dv_dict;
Py_BEGIN_CRITICAL_SECTION2(self, dict);
Expand Down

0 comments on commit a1fa3fb

Please sign in to comment.