@@ -4034,6 +4034,7 @@ resolve_descriptors(int nop,
4034
4034
{
4035
4035
int retval = -1 ;
4036
4036
NPY_CASTING safety ;
4037
+ int n_cleanup = 0 ; /* number of original_descrs filled (to XDECREF) */
4037
4038
PyArray_Descr * original_descrs [NPY_MAXARGS ];
4038
4039
4039
4040
NPY_UF_DBG_PRINT ("Resolving the descriptors\n" );
@@ -4070,6 +4071,7 @@ resolve_descriptors(int nop,
4070
4071
input_scalars [i ] = NULL ;
4071
4072
}
4072
4073
}
4074
+ n_cleanup = nop ;
4073
4075
4074
4076
npy_intp view_offset = NPY_MIN_INTP ; /* currently ignored */
4075
4077
safety = ufuncimpl -> resolve_descriptors_with_scalars (
@@ -4115,14 +4117,12 @@ resolve_descriptors(int nop,
4115
4117
PyArray_Descr * new_descr = npy_find_descr_for_scalar (
4116
4118
input , descr , original_DTypes [i ], signature [i ]);
4117
4119
if (new_descr == NULL ) {
4118
- nop = i ; /* only this much is initialized */
4119
4120
goto finish ;
4120
4121
}
4121
4122
int res = npy_update_operand_for_scalar (
4122
4123
& operands [i ], input , new_descr , casting );
4123
4124
Py_DECREF (new_descr );
4124
4125
if (res < 0 ) {
4125
- nop = i ; /* only this much is initialized */
4126
4126
goto finish ;
4127
4127
}
4128
4128
@@ -4136,9 +4136,9 @@ resolve_descriptors(int nop,
4136
4136
*/
4137
4137
original_descrs [i ] = PyArray_CastDescrToDType (descr , signature [i ]);
4138
4138
if (original_descrs [i ] == NULL ) {
4139
- nop = i ; /* only this much is initialized */
4140
4139
goto finish ;
4141
4140
}
4141
+ n_cleanup += 1 ;
4142
4142
}
4143
4143
4144
4144
if (ufuncimpl -> resolve_descriptors != & wrapped_legacy_resolve_descriptors ) {
@@ -4173,7 +4173,7 @@ resolve_descriptors(int nop,
4173
4173
retval = 0 ;
4174
4174
4175
4175
finish :
4176
- for (int i = 0 ; i < nop ; i ++ ) {
4176
+ for (int i = 0 ; i < n_cleanup ; i ++ ) {
4177
4177
Py_XDECREF (original_descrs [i ]);
4178
4178
}
4179
4179
return retval ;
0 commit comments