@@ -194,19 +194,20 @@ partial_new(PyTypeObject *type, PyObject *args, PyObject *kw)
194194 if (kw != NULL ) {
195195 PyObject * key , * val ;
196196 Py_ssize_t pos = 0 ;
197+ int error = 0 ;
197198 Py_BEGIN_CRITICAL_SECTION (kw );
198199 while (PyDict_Next (kw , & pos , & key , & val )) {
199200 if (val == phold ) {
200- PyErr_SetString (PyExc_TypeError ,
201- "Placeholder cannot be passed as a keyword argument" );
202- #ifdef Py_GIL_DISABLED
203- /* Need to release lock in case of error */
204- PyCriticalSection_End (& _py_cs );
205- #endif
206- return NULL ;
201+ error = 1 ;
202+ break ;
207203 }
208204 }
209205 Py_END_CRITICAL_SECTION ();
206+ if (error ) {
207+ PyErr_SetString (PyExc_TypeError ,
208+ "Placeholder cannot be passed as a keyword argument" );
209+ return NULL ;
210+ }
210211 }
211212
212213 /* check wrapped function / object */
@@ -732,6 +733,7 @@ partial_repr(PyObject *self)
732733 }
733734 }
734735 /* Pack keyword arguments */
736+ int error = 0 ;
735737 Py_BEGIN_CRITICAL_SECTION (kw );
736738 for (i = 0 ; PyDict_Next (kw , & i , & key , & value );) {
737739 /* Prevent key.__str__ from deleting the value. */
@@ -740,14 +742,14 @@ partial_repr(PyObject *self)
740742 key , value ));
741743 Py_DECREF (value );
742744 if (arglist == NULL ) {
743- #ifdef Py_GIL_DISABLED
744- /* Need to release lock in case of error */
745- PyCriticalSection_End (& _py_cs );
746- #endif
747- goto done ;
745+ error = 1 ;
746+ break ;
748747 }
749748 }
750749 Py_END_CRITICAL_SECTION ();
750+ if (error ) {
751+ goto done ;
752+ }
751753
752754 mod = PyType_GetModuleName (Py_TYPE (pto ));
753755 if (mod == NULL ) {
0 commit comments