@@ -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