summaryrefslogtreecommitdiffstats
path: root/Modules/_collectionsmodule.c
diff options
context:
space:
mode:
authorRaymond Hettinger <python@rcn.com>2015-09-06 00:05:52 (GMT)
committerRaymond Hettinger <python@rcn.com>2015-09-06 00:05:52 (GMT)
commit2b2b75374e7215e622b95f89ce93259c05002f24 (patch)
tree0cba38962aeb483dc8c2509a647caf18b12fd148 /Modules/_collectionsmodule.c
parente989bf587cd0e239de23846a22618613472a71ff (diff)
downloadcpython-2b2b75374e7215e622b95f89ce93259c05002f24.zip
cpython-2b2b75374e7215e622b95f89ce93259c05002f24.tar.gz
cpython-2b2b75374e7215e622b95f89ce93259c05002f24.tar.bz2
Prevent reentrant badness by deferring the decrefs as long as possible.
Diffstat (limited to 'Modules/_collectionsmodule.c')
-rw-r--r--Modules/_collectionsmodule.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c
index 3856d83..f450f25 100644
--- a/Modules/_collectionsmodule.c
+++ b/Modules/_collectionsmodule.c
@@ -419,9 +419,11 @@ deque_extend(dequeobject *deque, PyObject *iterable)
deque->rightblock->data[deque->rightindex] = item;
deque_trim_left(deque);
}
- Py_DECREF(it);
- if (PyErr_Occurred())
+ if (PyErr_Occurred()) {
+ Py_DECREF(it);
return NULL;
+ }
+ Py_DECREF(it);
Py_RETURN_NONE;
}
@@ -480,9 +482,11 @@ deque_extendleft(dequeobject *deque, PyObject *iterable)
deque->leftblock->data[deque->leftindex] = item;
deque_trim_right(deque);
}
- Py_DECREF(it);
- if (PyErr_Occurred())
+ if (PyErr_Occurred()) {
+ Py_DECREF(it);
return NULL;
+ }
+ Py_DECREF(it);
Py_RETURN_NONE;
}
@@ -497,8 +501,8 @@ deque_inplace_concat(dequeobject *deque, PyObject *other)
result = deque_extend(deque, other);
if (result == NULL)
return result;
- Py_DECREF(result);
Py_INCREF(deque);
+ Py_DECREF(result);
return (PyObject *)deque;
}
@@ -1260,8 +1264,8 @@ deque_repr(PyObject *deque)
aslist, ((dequeobject *)deque)->maxlen);
else
result = PyUnicode_FromFormat("deque(%R)", aslist);
- Py_DECREF(aslist);
Py_ReprLeave(deque);
+ Py_DECREF(aslist);
return result;
}