Skip to content

Commit

Permalink
Revert part of 3471a3515827 that caused a performance regression
Browse files Browse the repository at this point in the history
  • Loading branch information
rhettinger committed Sep 12, 2016
1 parent 4103e4d commit 8805717
Showing 1 changed file with 44 additions and 8 deletions.
52 changes: 44 additions & 8 deletions Modules/_collectionsmodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -403,10 +403,28 @@ deque_extend(dequeobject *deque, PyObject *iterable)

iternext = *Py_TYPE(it)->tp_iternext;
while ((item = iternext(it)) != NULL) {
if (deque_append_internal(deque, item, maxlen) < 0) {
Py_DECREF(item);
Py_DECREF(it);
return NULL;
if (deque->rightindex == BLOCKLEN - 1) {
block *b = newblock();
if (b == NULL) {
Py_DECREF(item);
Py_DECREF(it);
return NULL;
}
b->leftlink = deque->rightblock;
CHECK_END(deque->rightblock->rightlink);
deque->rightblock->rightlink = b;
deque->rightblock = b;
MARK_END(b->rightlink);
deque->rightindex = -1;
}
Py_SIZE(deque)++;
deque->rightindex++;
deque->rightblock->data[deque->rightindex] = item;
if (NEEDS_TRIM(deque, maxlen)) {
PyObject *olditem = deque_popleft(deque, NULL);
Py_DECREF(olditem);
} else {
deque->state++;
}
}
return finalize_iterator(it);
Expand Down Expand Up @@ -450,10 +468,28 @@ deque_extendleft(dequeobject *deque, PyObject *iterable)

iternext = *Py_TYPE(it)->tp_iternext;
while ((item = iternext(it)) != NULL) {
if (deque_appendleft_internal(deque, item, maxlen) < 0) {
Py_DECREF(item);
Py_DECREF(it);
return NULL;
if (deque->leftindex == 0) {
block *b = newblock();
if (b == NULL) {
Py_DECREF(item);
Py_DECREF(it);
return NULL;
}
b->rightlink = deque->leftblock;
CHECK_END(deque->leftblock->leftlink);
deque->leftblock->leftlink = b;
deque->leftblock = b;
MARK_END(b->leftlink);
deque->leftindex = BLOCKLEN;
}
Py_SIZE(deque)++;
deque->leftindex--;
deque->leftblock->data[deque->leftindex] = item;
if (NEEDS_TRIM(deque, maxlen)) {
PyObject *olditem = deque_pop(deque, NULL);
Py_DECREF(olditem);
} else {
deque->state++;
}
}
return finalize_iterator(it);
Expand Down

0 comments on commit 8805717

Please sign in to comment.