summaryrefslogtreecommitdiffstats
path: root/Objects/unicodeobject.c
diff options
context:
space:
mode:
Diffstat (limited to 'Objects/unicodeobject.c')
-rw-r--r--Objects/unicodeobject.c12
1 files changed, 7 insertions, 5 deletions
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?