Skip to content

Commit 6c786a5

Browse files
committed
error logic change
1 parent ec87ef9 commit 6c786a5

1 file changed

Lines changed: 14 additions & 12 deletions

File tree

Modules/_functoolsmodule.c

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)