From a3711f73c1bdc4022d4c77a37c884672817c88f8 Mon Sep 17 00:00:00 2001 From: "Michael W. Hudson" Date: Mon, 2 Aug 2004 14:50:43 +0000 Subject: [PATCH] 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. --- Python/ceval.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Python/ceval.c b/Python/ceval.c index 3a462afbed0..6c457e125c1 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;