summaryrefslogtreecommitdiff
path: root/Modules/_collectionsmodule.c
diff options
context:
space:
mode:
authorRaymond Hettinger <python@rcn.com>2015-03-21 01:53:16 -0700
committerRaymond Hettinger <python@rcn.com>2015-03-21 01:53:16 -0700
commitac13ad6a32e5c130de91fc2038de9b1c265b3fe9 (patch)
tree48ee3ad9d130d307c2a1f455251d3d729cd89a9c /Modules/_collectionsmodule.c
parent0f6f94778a7cad295c48a082602603795aeee3ba (diff)
downloadcpython-git-ac13ad6a32e5c130de91fc2038de9b1c265b3fe9.tar.gz
For safety, wait to decref deleted values until the deque state has been restored.
Diffstat (limited to 'Modules/_collectionsmodule.c')
-rw-r--r--Modules/_collectionsmodule.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c
index 7d7f0cfc03..28aacc3317 100644
--- a/Modules/_collectionsmodule.c
+++ b/Modules/_collectionsmodule.c
@@ -864,9 +864,9 @@ deque_remove(dequeobject *deque, PyObject *value)
if (cmp > 0) {
PyObject *tgt = deque_popleft(deque, NULL);
assert (tgt != NULL);
- Py_DECREF(tgt);
if (_deque_rotate(deque, i) == -1)
return NULL;
+ Py_DECREF(tgt);
Py_RETURN_NONE;
}
else if (cmp < 0) {
@@ -956,16 +956,16 @@ static int
deque_del_item(dequeobject *deque, Py_ssize_t i)
{
PyObject *item;
+ int rv;
assert (i >= 0 && i < Py_SIZE(deque));
if (_deque_rotate(deque, -i) == -1)
return -1;
-
item = deque_popleft(deque, NULL);
+ rv = _deque_rotate(deque, i);
assert (item != NULL);
Py_DECREF(item);
-
- return _deque_rotate(deque, i);
+ return rv;
}
static int