https://github.com/python/cpython/commit/1bd8cf9ed26977ac8c5cf3ec0eccdb6e7a3798e4
commit: 1bd8cf9ed26977ac8c5cf3ec0eccdb6e7a3798e4
branch: main
author: Donghee Na <[email protected]>
committer: corona10 <[email protected]>
date: 2026-02-17T14:52:50Z
summary:
gh-141510: Remove unncessary lock holding for frozendict repr (gh-144920)
files:
M Objects/dictobject.c
diff --git a/Objects/dictobject.c b/Objects/dictobject.c
index 510a0fab468cc6..62abb793d002e0 100644
--- a/Objects/dictobject.c
+++ b/Objects/dictobject.c
@@ -3381,19 +3381,18 @@ dict_dealloc(PyObject *self)
static PyObject *
-dict_repr_lock_held(PyObject *self)
+anydict_repr_impl(PyObject *self)
{
PyDictObject *mp = (PyDictObject *)self;
PyObject *key = NULL, *value = NULL;
- ASSERT_DICT_LOCKED(mp);
- int res = Py_ReprEnter((PyObject *)mp);
+ int res = Py_ReprEnter(self);
if (res != 0) {
return (res > 0 ? PyUnicode_FromString("{...}") : NULL);
}
if (mp->ma_used == 0) {
- Py_ReprLeave((PyObject *)mp);
+ Py_ReprLeave(self);
return PyUnicode_FromString("{}");
}
@@ -3412,7 +3411,7 @@ dict_repr_lock_held(PyObject *self)
Note that repr may mutate the dict. */
Py_ssize_t i = 0;
int first = 1;
- while (_PyDict_Next((PyObject *)mp, &i, &key, &value, NULL)) {
+ while (_PyDict_Next(self, &i, &key, &value, NULL)) {
// Prevent repr from deleting key or value during key format.
Py_INCREF(key);
Py_INCREF(value);
@@ -3454,18 +3453,25 @@ dict_repr_lock_held(PyObject *self)
goto error;
}
- Py_ReprLeave((PyObject *)mp);
+ Py_ReprLeave(self);
return PyUnicodeWriter_Finish(writer);
error:
- Py_ReprLeave((PyObject *)mp);
+ Py_ReprLeave(self);
PyUnicodeWriter_Discard(writer);
Py_XDECREF(key);
Py_XDECREF(value);
return NULL;
}
+static PyObject *
+dict_repr_lock_held(PyObject *self)
+{
+ ASSERT_DICT_LOCKED((PyDictObject *)self);
+ return anydict_repr_impl(self);
+}
+
static PyObject *
dict_repr(PyObject *self)
{
@@ -7862,7 +7868,7 @@ static PyMethodDef frozendict_methods[] = {
static PyObject *
frozendict_repr(PyObject *self)
{
- PyObject *repr = dict_repr(self);
+ PyObject *repr = anydict_repr_impl(self);
if (repr == NULL) {
return NULL;
}
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]