[Python-checkins] cpython (3.5): Issue #26811: gc.get_objects() no longer contains a broken tuple with NULL
serhiy.storchaka
python-checkins at python.org
Wed May 4 14:43:39 EDT 2016
https://hg.python.org/cpython/rev/a98ef122d73d
changeset: 101226:a98ef122d73d
branch: 3.5
parent: 101224:eae59b6bf133
user: Serhiy Storchaka <storchaka at gmail.com>
date: Wed May 04 21:42:05 2016 +0300
summary:
Issue #26811: gc.get_objects() no longer contains a broken tuple with NULL
pointer.
files:
Misc/NEWS | 3 +++
Objects/descrobject.c | 30 +++++++++++++++---------------
2 files changed, 18 insertions(+), 15 deletions(-)
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -10,6 +10,9 @@
Core and Builtins
-----------------
+- Issue #26811: gc.get_objects() no longer contains a broken tuple with NULL
+ pointer.
+
- Issue #20120: Use RawConfigParser for .pypirc parsing,
removing support for interpolation unintentionally added
with move to Python 3. Behavior no longer does any
diff --git a/Objects/descrobject.c b/Objects/descrobject.c
--- a/Objects/descrobject.c
+++ b/Objects/descrobject.c
@@ -1386,27 +1386,27 @@
return NULL;
}
args = cached_args;
- if (!args || Py_REFCNT(args) != 1) {
- Py_CLEAR(cached_args);
- if (!(cached_args = args = PyTuple_New(1)))
+ cached_args = NULL;
+ if (!args) {
+ args = PyTuple_New(1);
+ if (!args)
return NULL;
+ _PyObject_GC_UNTRACK(args);
}
- Py_INCREF(args);
- assert (Py_REFCNT(args) == 2);
Py_INCREF(obj);
PyTuple_SET_ITEM(args, 0, obj);
ret = PyObject_Call(gs->prop_get, args, NULL);
- if (args == cached_args) {
- if (Py_REFCNT(args) == 2) {
- obj = PyTuple_GET_ITEM(args, 0);
- PyTuple_SET_ITEM(args, 0, NULL);
- Py_XDECREF(obj);
- }
- else {
- Py_CLEAR(cached_args);
- }
+ if (cached_args == NULL && Py_REFCNT(args) == 1) {
+ assert(Py_SIZE(args) == 1);
+ assert(PyTuple_GET_ITEM(args, 0) == obj);
+ cached_args = args;
+ Py_DECREF(obj);
}
- Py_DECREF(args);
+ else {
+ assert(Py_REFCNT(args) >= 1);
+ _PyObject_GC_TRACK(args);
+ Py_DECREF(args);
+ }
return ret;
}
--
Repository URL: https://hg.python.org/cpython
More information about the Python-checkins
mailing list