Mailing List Archive

gh-112087: Make `list.extend(dict)` behave atomically (#117438)
https://github.com/python/cpython/commit/027fa2eccf39ddccdf7b416d16601277a7112054
commit: 027fa2eccf39ddccdf7b416d16601277a7112054
branch: main
author: Sam Gross <colesbury@gmail.com>
committer: colesbury <colesbury@gmail.com>
date: 2024-04-02T10:45:00-04:00
summary:

gh-112087: Make `list.extend(dict)` behave atomically (#117438)

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.

files:
M Objects/listobject.c

diff --git a/Objects/listobject.c b/Objects/listobject.c
index 470ad8eb8135db..472c471d9968a4 100644
--- a/Objects/listobject.c
+++ b/Objects/listobject.c
@@ -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);

_______________________________________________
Python-checkins mailing list -- python-checkins@python.org
To unsubscribe send an email to python-checkins-leave@python.org
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: list-python-checkins@lists.gossamer-threads.com