Skip to content

Commit 3f2cfd0

Browse files
gh-128421: make exception group methods thread safe (#129298)
1 parent be98fda commit 3f2cfd0

File tree

2 files changed

+110
-11
lines changed

2 files changed

+110
-11
lines changed

‎Objects/clinic/exceptions.c.h‎

Lines changed: 73 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎Objects/exceptions.c‎

Lines changed: 37 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,9 @@
2020

2121
/*[clinic input]
2222
class BaseException "PyBaseExceptionObject *" "&PyExc_BaseException"
23+
class BaseExceptionGroup "PyBaseExceptionGroupObject *" "&PyExc_BaseExceptionGroup"
2324
[clinic start generated code]*/
24-
/*[clinic end generated code: output=da39a3ee5e6b4b0d input=90558eb0fbf8a3d0]*/
25+
/*[clinic end generated code: output=da39a3ee5e6b4b0d input=b7c45e78cff8edc3]*/
2526

2627

2728
/* Compatibility aliases */
@@ -1034,10 +1035,18 @@ BaseExceptionGroup_str(PyBaseExceptionGroupObject *self)
10341035
self->msg, num_excs, num_excs>1 ? "s" : "");
10351036
}
10361037

1038+
/*[clinic input]
1039+
@critical_section
1040+
BaseExceptionGroup.derive
1041+
excs: object
1042+
/
1043+
[clinic start generated code]*/
1044+
10371045
staticPyObject*
1038-
BaseExceptionGroup_derive(PyObject*self_, PyObject*excs)
1046+
BaseExceptionGroup_derive_impl(PyBaseExceptionGroupObject*self,
1047+
PyObject*excs)
1048+
/*[clinic end generated code: output=4307564218dfbf06 input=f72009d38e98cec1]*/
10391049
{
1040-
PyBaseExceptionGroupObject*self=_PyBaseExceptionGroupObject_cast(self_);
10411050
PyObject*init_args=PyTuple_Pack(2, self->msg, excs);
10421051
if (!init_args){
10431052
returnNULL;
@@ -1330,8 +1339,17 @@ exceptiongroup_split_recursive(PyObject *exc,
13301339
returnretval;
13311340
}
13321341

1342+
/*[clinic input]
1343+
@critical_section
1344+
BaseExceptionGroup.split
1345+
matcher_value: object
1346+
/
1347+
[clinic start generated code]*/
1348+
13331349
staticPyObject*
1334-
BaseExceptionGroup_split(PyObject*self, PyObject*matcher_value)
1350+
BaseExceptionGroup_split_impl(PyBaseExceptionGroupObject*self,
1351+
PyObject*matcher_value)
1352+
/*[clinic end generated code: output=d74db579da4df6e2 input=0c5cfbfed57e0052]*/
13351353
{
13361354
_exceptiongroup_split_matcher_typematcher_type;
13371355
if (get_matcher_type(matcher_value, &matcher_type) <0){
@@ -1341,7 +1359,7 @@ BaseExceptionGroup_split(PyObject *self, PyObject *matcher_value)
13411359
_exceptiongroup_split_resultsplit_result;
13421360
boolconstruct_rest= true;
13431361
if (exceptiongroup_split_recursive(
1344-
self, matcher_type, matcher_value,
1362+
(PyObject*)self, matcher_type, matcher_value,
13451363
construct_rest, &split_result) <0){
13461364
returnNULL;
13471365
}
@@ -1356,8 +1374,17 @@ BaseExceptionGroup_split(PyObject *self, PyObject *matcher_value)
13561374
returnresult;
13571375
}
13581376

1377+
/*[clinic input]
1378+
@critical_section
1379+
BaseExceptionGroup.subgroup
1380+
matcher_value: object
1381+
/
1382+
[clinic start generated code]*/
1383+
13591384
staticPyObject*
1360-
BaseExceptionGroup_subgroup(PyObject*self, PyObject*matcher_value)
1385+
BaseExceptionGroup_subgroup_impl(PyBaseExceptionGroupObject*self,
1386+
PyObject*matcher_value)
1387+
/*[clinic end generated code: output=07dbec8f77d4dd8e input=988ffdd755a151ce]*/
13611388
{
13621389
_exceptiongroup_split_matcher_typematcher_type;
13631390
if (get_matcher_type(matcher_value, &matcher_type) <0){
@@ -1367,7 +1394,7 @@ BaseExceptionGroup_subgroup(PyObject *self, PyObject *matcher_value)
13671394
_exceptiongroup_split_resultsplit_result;
13681395
boolconstruct_rest= false;
13691396
if (exceptiongroup_split_recursive(
1370-
self, matcher_type, matcher_value,
1397+
(PyObject*)self, matcher_type, matcher_value,
13711398
construct_rest, &split_result) <0){
13721399
returnNULL;
13731400
}
@@ -1633,9 +1660,9 @@ static PyMemberDef BaseExceptionGroup_members[] ={
16331660
staticPyMethodDefBaseExceptionGroup_methods[] ={
16341661
{"__class_getitem__", (PyCFunction)Py_GenericAlias,
16351662
METH_O|METH_CLASS, PyDoc_STR("See PEP 585")},
1636-
{"derive", (PyCFunction)BaseExceptionGroup_derive, METH_O},
1637-
{"split", (PyCFunction)BaseExceptionGroup_split, METH_O},
1638-
{"subgroup", (PyCFunction)BaseExceptionGroup_subgroup, METH_O},
1663+
BASEEXCEPTIONGROUP_DERIVE_METHODDEF
1664+
BASEEXCEPTIONGROUP_SPLIT_METHODDEF
1665+
BASEEXCEPTIONGROUP_SUBGROUP_METHODDEF
16391666
{NULL}
16401667
};
16411668

0 commit comments

Comments
(0)