[Python-checkins] cpython (3.5): Prevent reentrant badness by deferring the decrefs as long as possible.
raymond.hettinger
python-checkins at python.org
Sun Sep 6 02:06:23 CEST 2015
https://hg.python.org/cpython/rev/ba63067654d3
changeset: 97690:ba63067654d3
branch: 3.5
parent: 97688:611c732f7632
user: Raymond Hettinger <python at rcn.com>
date: Sat Sep 05 17:05:52 2015 -0700
summary:
Prevent reentrant badness by deferring the decrefs as long as possible.
files:
Modules/_collectionsmodule.c | 16 ++++++++++------
1 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c
--- a/Modules/_collectionsmodule.c
+++ b/Modules/_collectionsmodule.c
@@ -419,9 +419,11 @@
deque->rightblock->data[deque->rightindex] = item;
deque_trim_left(deque);
}
+ if (PyErr_Occurred()) {
+ Py_DECREF(it);
+ return NULL;
+ }
Py_DECREF(it);
- if (PyErr_Occurred())
- return NULL;
Py_RETURN_NONE;
}
@@ -480,9 +482,11 @@
deque->leftblock->data[deque->leftindex] = item;
deque_trim_right(deque);
}
+ if (PyErr_Occurred()) {
+ Py_DECREF(it);
+ return NULL;
+ }
Py_DECREF(it);
- if (PyErr_Occurred())
- return NULL;
Py_RETURN_NONE;
}
@@ -497,8 +501,8 @@
result = deque_extend(deque, other);
if (result == NULL)
return result;
+ Py_INCREF(deque);
Py_DECREF(result);
- Py_INCREF(deque);
return (PyObject *)deque;
}
@@ -1260,8 +1264,8 @@
aslist, ((dequeobject *)deque)->maxlen);
else
result = PyUnicode_FromFormat("deque(%R)", aslist);
+ Py_ReprLeave(deque);
Py_DECREF(aslist);
- Py_ReprLeave(deque);
return result;
}
--
Repository URL: https://hg.python.org/cpython
More information about the Python-checkins
mailing list