diff options
author | Michael W. Hudson <mwh@python.net> | 2004-08-02 14:50:43 (GMT) |
---|---|---|
committer | Michael W. Hudson <mwh@python.net> | 2004-08-02 14:50:43 (GMT) |
commit | a3711f73c1bdc4022d4c77a37c884672817c88f8 (patch) | |
tree | ffc71c0b47aacb9b1bcb6fa01424c6e6ecf35a6a /Python | |
parent | 77a602fbf292f3673e021e2b2567caaf70712645 (diff) | |
download | cpython-a3711f73c1bdc4022d4c77a37c884672817c88f8.zip cpython-a3711f73c1bdc4022d4c77a37c884672817c88f8.tar.gz cpython-a3711f73c1bdc4022d4c77a37c884672817c88f8.tar.bz2 |
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.
Diffstat (limited to 'Python')
-rw-r--r-- | Python/ceval.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/Python/ceval.c b/Python/ceval.c index 3a462af..6c457e1 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; |