From: Michael W. Hudson Date: Mon, 2 Aug 2004 14:50:43 +0000 (+0000) Subject: Fix for the unfortunate fact that PyDict_GetItem and PyObject_GetItem X-Git-Tag: v2.4a2~63 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a3711f73c1bdc4022d4c77a37c884672817c88f8;p=python Fix for the unfortunate fact that PyDict_GetItem and PyObject_GetItem have differing refcount semantics. If anyone sees a prettier way to acheive the same ends, then please go for it. I think this is the first time I've ever used Py_XINCREF. --- diff --git a/Python/ceval.c b/Python/ceval.c index 3a462afbed..6c457e125c 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -1742,8 +1742,10 @@ PyEval_EvalFrame(PyFrameObject *f) PyObject_REPR(w)); break; } - if (PyDict_CheckExact(v)) + if (PyDict_CheckExact(v)) { x = PyDict_GetItem(v, w); + Py_XINCREF(x); + } else { x = PyObject_GetItem(v, w); if (x == NULL && PyErr_Occurred()) { @@ -1763,8 +1765,8 @@ PyEval_EvalFrame(PyFrameObject *f) break; } } + Py_INCREF(x); } - Py_INCREF(x); PUSH(x); continue;