Co-authored-by: Peter Bierma <zintensitydev@gmail.com>
--- /dev/null
+Fixes a crash of :class:`types.SimpleNamespace` on :term:`free threading` builds,
+when several threads were calling its :meth:`~object.__repr__` method at the
+same time.
if (PyUnicode_Check(key) && PyUnicode_GET_LENGTH(key) > 0) {
PyObject *value, *item;
- value = PyDict_GetItemWithError(d, key);
- if (value != NULL) {
+ int has_key = PyDict_GetItemRef(d, key, &value);
+ if (has_key == 1) {
item = PyUnicode_FromFormat("%U=%R", key, value);
+ Py_DECREF(value);
if (item == NULL) {
loop_error = 1;
}
Py_DECREF(item);
}
}
- else if (PyErr_Occurred()) {
+ else if (has_key < 0) {
loop_error = 1;
}
}