diff --git a/Objects/dictobject.c b/Objects/dictobject.c --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -360,7 +360,8 @@ PyDictKeyEntry *entries = &keys->dk_entries[0]; Py_ssize_t i, n; for (i = 0, n = DK_SIZE(keys); i < n; i++) { - Py_XDECREF(entries[i].me_key); + if (entries[i].me_key != dummy) + Py_XDECREF(entries[i].me_key); Py_XDECREF(entries[i].me_value); } PyMem_FREE(keys); @@ -839,7 +840,6 @@ Py_INCREF(key); ep->me_key = key; ep->me_hash = hash; - Py_DECREF(dummy); } else { assert(_PyDict_HasSplitTable(mp)); } @@ -966,13 +966,6 @@ } else { assert(oldkeys->dk_lookup != lookdict_split); - if (oldkeys->dk_lookup != lookdict_unicode_nodummy) { - PyDictKeyEntry *ep0 = &oldkeys->dk_entries[0]; - for (i = 0; i < oldsize; i++) { - if (ep0[i].me_key == dummy) - Py_DECREF(dummy); - } - } assert(oldkeys->dk_refcnt == 1); DK_DEBUG_DECREF PyMem_FREE(oldkeys); } @@ -1236,7 +1229,6 @@ if (!_PyDict_HasSplitTable(mp)) { ENSURE_ALLOWS_DELETIONS(mp); old_key = ep->me_key; - Py_INCREF(dummy); ep->me_key = dummy; Py_DECREF(old_key); }