Skip to content

Commit 54c5188

Browse files
committed
Update logic
1 parent 5a4f05a commit 54c5188

1 file changed

Lines changed: 20 additions & 10 deletions

File tree

Modules/itertoolsmodule.c

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3785,7 +3785,7 @@ typedef struct {
37853785
PyObject *ittuple; /* tuple of iterators */
37863786
PyObject *result;
37873787
PyObject *fillvalue;
3788-
int running;
3788+
uint8_t running;
37893789
} ziplongestobject;
37903790

37913791
#define ziplongestobject_CAST(op) ((ziplongestobject *)(op))
@@ -3895,15 +3895,20 @@ zip_longest_next_lock_held(PyObject *op)
38953895
PyObject *olditem;
38963896

38973897
if (lz->running == 1) {
3898-
PyErr_SetString(PyExc_ValueError, "zip_logest already executing");
3898+
PyErr_SetString(PyExc_ValueError,
3899+
"zip_logest() iterator already executing");
38993900
return NULL;
39003901
}
39013902
lz->running = 1;
39023903

3903-
if (tuplesize == 0)
3904-
return NULL;
3905-
if (lz->numactive == 0)
3906-
return NULL;
3904+
if (tuplesize == 0) {
3905+
result = NULL;
3906+
goto done;
3907+
}
3908+
if (lz->numactive == 0) {
3909+
result = NULL;
3910+
goto done;
3911+
}
39073912
if (_PyObject_IsUniquelyReferenced(result)) {
39083913
Py_INCREF(result);
39093914
for (i=0 ; i < tuplesize ; i++) {
@@ -3917,7 +3922,8 @@ zip_longest_next_lock_held(PyObject *op)
39173922
if (lz->numactive == 0 || PyErr_Occurred()) {
39183923
lz->numactive = 0;
39193924
Py_DECREF(result);
3920-
return NULL;
3925+
result = NULL;
3926+
goto done;
39213927
} else {
39223928
item = Py_NewRef(lz->fillvalue);
39233929
PyTuple_SET_ITEM(lz->ittuple, i, NULL);
@@ -3934,8 +3940,10 @@ zip_longest_next_lock_held(PyObject *op)
39343940
_PyTuple_Recycle(result);
39353941
} else {
39363942
result = PyTuple_New(tuplesize);
3937-
if (result == NULL)
3938-
return NULL;
3943+
if (result == NULL) {
3944+
result = NULL;
3945+
goto done;
3946+
}
39393947
for (i=0 ; i < tuplesize ; i++) {
39403948
it = PyTuple_GET_ITEM(lz->ittuple, i);
39413949
if (it == NULL) {
@@ -3947,7 +3955,8 @@ zip_longest_next_lock_held(PyObject *op)
39473955
if (lz->numactive == 0 || PyErr_Occurred()) {
39483956
lz->numactive = 0;
39493957
Py_DECREF(result);
3950-
return NULL;
3958+
result = NULL;
3959+
goto done;
39513960
} else {
39523961
item = Py_NewRef(lz->fillvalue);
39533962
PyTuple_SET_ITEM(lz->ittuple, i, NULL);
@@ -3958,6 +3967,7 @@ zip_longest_next_lock_held(PyObject *op)
39583967
PyTuple_SET_ITEM(result, i, item);
39593968
}
39603969
}
3970+
done:
39613971
lz->running = 0;
39623972
return result;
39633973
}

0 commit comments

Comments
 (0)