mirror of
https://github.com/python/cpython.git
synced 2025-08-03 16:39:00 +00:00
Defer deleted item decref until after the deque is restored to a consistent state.
This commit is contained in:
parent
1dd8e71eb3
commit
c6249a6268
2 changed files with 10 additions and 6 deletions
|
@ -698,9 +698,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)
|
||||
if (_deque_rotate(deque, i))
|
||||
return NULL;
|
||||
Py_DECREF(tgt);
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
else if (cmp < 0) {
|
||||
|
@ -781,16 +781,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)
|
||||
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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue