- Issues #24099, #24100, and #24101: Fix free-after-use bug in heapq's siftup
and siftdown functions.
+- Backport collections.deque fixes from Python 3.5. Prevents reentrant badness
+ during deletion by deferring the decref until the container has been restored
+ to a consistent state.
+
- Issue #23842: os.major(), os.minor() and os.makedev() now support ints again.
- Issue #23811: Add missing newline to the PyCompileError error message.
if (cmp > 0) {
PyObject *tgt = deque_popleft(deque, NULL);
assert (tgt != NULL);
- Py_DECREF(tgt);
- if (_deque_rotate(deque, i) == -1)
+ if (_deque_rotate(deque, i))
return NULL;
+ Py_DECREF(tgt);
Py_RETURN_NONE;
}
else if (cmp < 0) {
deque_del_item(dequeobject *deque, Py_ssize_t i)
{
PyObject *item;
+ int rv;
- assert (i >= 0 && i < deque->len);
- if (_deque_rotate(deque, -i) == -1)
+ assert (i >= 0 && i < Py_SIZE(deque));
+ if (_deque_rotate(deque, -i))
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