(original) (raw)
--- olddictobject.c 2009-04-08 15:56:06.000000000 -0400 +++ newdictobject.c 2009-04-09 09:21:40.000000000 -0400 @@ -1944,10 +1944,24 @@ val = ep->me_value; if (val == NULL) { val = failobj; - if (PyDict_SetItem((PyObject*)mp, key, failobj)) - val = NULL; + Py_INCREF(val); + Py_INCREF(key); + MAINTAIN_TRACKING(mp, key, val); + if (ep->me_key == NULL) + mp->ma_fill++; + else { + assert(ep->me_key == dummy); + Py_DECREF(dummy); + } + ep->me_key = key; + ep->me_hash = (Py_ssize_t)hash; + ep->me_value = val; + mp->ma_used++; + if (mp->ma_fill*3 >= (mp->ma_mask+1)*2 && + dictresize(mp, (mp->ma_used > 50000 ? 2 : 4)*(mp->ma_used)) != 0) + return NULL; } - Py_XINCREF(val); + Py_INCREF(val); return val; }