Skip to content

Commit 3e072a0

Browse files
Minimise diff
1 parent 95d5eb2 commit 3e072a0

File tree

1 file changed

+14
-8
lines changed

1 file changed

+14
-8
lines changed

Modules/_collectionsmodule.c

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2118,7 +2118,7 @@ dequereviter_next(PyObject *self)
21182118
static PyObject *
21192119
dequereviter_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
21202120
{
2121-
Py_ssize_t i, index = 0;
2121+
Py_ssize_t i, index=0;
21222122
PyObject *deque;
21232123
dequeiterobject *it;
21242124
collections_state *state = get_module_state_by_cls(type);
@@ -2130,18 +2130,24 @@ dequereviter_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
21302130
if (!it)
21312131
return NULL;
21322132
/* consume items from the queue */
2133-
for (i=0; i < index; i++) {
2133+
for(i=0; i<index; i++) {
21342134
PyObject *item = dequereviter_next((PyObject *)it);
2135-
if (item == NULL) {
2136-
if (PyErr_Occurred()) {
2135+
if (item) {
2136+
Py_DECREF(item);
2137+
} else {
2138+
/*
2139+
* It's safe to read directly from it without acquiring the
2140+
* per-object lock; the iterator isn't visible to any other threads
2141+
* yet.
2142+
*/
2143+
if (it->counter) {
21372144
Py_DECREF(it);
21382145
return NULL;
2139-
}
2140-
break;
2146+
} else
2147+
break;
21412148
}
2142-
Py_DECREF(item);
21432149
}
2144-
return (PyObject *)it;
2150+
return (PyObject*)it;
21452151
}
21462152

21472153
static PyType_Slot dequereviter_slots[] = {

0 commit comments

Comments
 (0)