summaryrefslogtreecommitdiffstats
path: root/Objects
diff options
context:
space:
mode:
Diffstat (limited to 'Objects')
-rw-r--r--Objects/typeobject.c6
-rw-r--r--Objects/unicodeobject.c12
2 files changed, 10 insertions, 8 deletions
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index e220d10..c65d0ec 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -6683,7 +6683,7 @@ type_add_method(PyTypeObject *type, PyMethodDef *meth)
int err;
PyObject *dict = lookup_tp_dict(type);
if (!(meth->ml_flags & METH_COEXIST)) {
- err = PyDict_SetDefault(dict, name, descr) == NULL;
+ err = PyDict_SetDefaultRef(dict, name, descr, NULL) < 0;
}
else {
err = PyDict_SetItem(dict, name, descr) < 0;
@@ -6731,7 +6731,7 @@ type_add_members(PyTypeObject *type)
if (descr == NULL)
return -1;
- if (PyDict_SetDefault(dict, PyDescr_NAME(descr), descr) == NULL) {
+ if (PyDict_SetDefaultRef(dict, PyDescr_NAME(descr), descr, NULL) < 0) {
Py_DECREF(descr);
return -1;
}
@@ -6756,7 +6756,7 @@ type_add_getset(PyTypeObject *type)
return -1;
}
- if (PyDict_SetDefault(dict, PyDescr_NAME(descr), descr) == NULL) {
+ if (PyDict_SetDefaultRef(dict, PyDescr_NAME(descr), descr, NULL) < 0) {
Py_DECREF(descr);
return -1;
}
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index b236ddb..0a569a9 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -14894,16 +14894,18 @@ _PyUnicode_InternInPlace(PyInterpreterState *interp, PyObject **p)
PyObject *interned = get_interned_dict(interp);
assert(interned != NULL);
- PyObject *t = PyDict_SetDefault(interned, s, s);
- if (t == NULL) {
+ PyObject *t;
+ int res = PyDict_SetDefaultRef(interned, s, s, &t);
+ if (res < 0) {
PyErr_Clear();
return;
}
-
- if (t != s) {
- Py_SETREF(*p, Py_NewRef(t));
+ else if (res == 1) {
+ // value was already present (not inserted)
+ Py_SETREF(*p, t);
return;
}
+ Py_DECREF(t);
if (_Py_IsImmortal(s)) {
// XXX Restrict this to the main interpreter?