Skip to content

Commit c82bf62

Browse files
fix: critical section for islice_next
1 parent 6b217ea commit c82bf62

1 file changed

Lines changed: 12 additions & 2 deletions

File tree

Modules/itertoolsmodule.c

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1625,8 +1625,8 @@ islice_traverse(PyObject *op, visitproc visit, void *arg)
16251625
return 0;
16261626
}
16271627

1628-
static PyObject *
1629-
islice_next(PyObject *op)
1628+
static inline PyObject *
1629+
islice_next_lock_held(PyObject *op)
16301630
{
16311631
isliceobject *lz = isliceobject_CAST(op);
16321632
PyObject *item;
@@ -1665,6 +1665,16 @@ islice_next(PyObject *op)
16651665
return NULL;
16661666
}
16671667

1668+
static PyObject *
1669+
islice_next(PyObject *op)
1670+
{
1671+
PyObject *result;
1672+
Py_BEGIN_CRITICAL_SECTION(op);
1673+
result = islice_next_lock_held(op);
1674+
Py_END_CRITICAL_SECTION();
1675+
return result;
1676+
}
1677+
16681678
PyDoc_STRVAR(islice_doc,
16691679
"islice(iterable, stop) --> islice object\n\
16701680
islice(iterable, start, stop[, step]) --> islice object\n\

0 commit comments

Comments
 (0)