gh-128421: make exception group methods thread safe (#129298) · python/cpython@3f2cfd0

GitHub

@@ -20,8 +20,9 @@

20202121/*[clinic input]

2222class 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]*/

252626272728/* Compatibility aliases */

@@ -1034,10 +1035,18 @@ BaseExceptionGroup_str(PyBaseExceptionGroupObject *self)

10341035self->msg, num_excs, num_excs>1 ? "s" : "");

10351036}

103610371038+/*[clinic input]

1039+@critical_section

1040+BaseExceptionGroup.derive

1041+ excs: object

1042+ /

1043+[clinic start generated code]*/

1044+10371045staticPyObject*

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_);

10411050PyObject*init_args=PyTuple_Pack(2, self->msg, excs);

10421051if (!init_args) {

10431052returnNULL;

@@ -1330,8 +1339,17 @@ exceptiongroup_split_recursive(PyObject *exc,

13301339returnretval;

13311340}

133213411342+/*[clinic input]

1343+@critical_section

1344+BaseExceptionGroup.split

1345+ matcher_value: object

1346+ /

1347+[clinic start generated code]*/

1348+13331349staticPyObject*

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;

13371355if (get_matcher_type(matcher_value, &matcher_type) <0) {

@@ -1341,7 +1359,7 @@ BaseExceptionGroup_split(PyObject *self, PyObject *matcher_value)

13411359_exceptiongroup_split_resultsplit_result;

13421360boolconstruct_rest= true;

13431361if (exceptiongroup_split_recursive(

1344-self, matcher_type, matcher_value,

1362+(PyObject*)self, matcher_type, matcher_value,

13451363construct_rest, &split_result) <0) {

13461364returnNULL;

13471365 }

@@ -1356,8 +1374,17 @@ BaseExceptionGroup_split(PyObject *self, PyObject *matcher_value)

13561374returnresult;

13571375}

135813761377+/*[clinic input]

1378+@critical_section

1379+BaseExceptionGroup.subgroup

1380+ matcher_value: object

1381+ /

1382+[clinic start generated code]*/

1383+13591384staticPyObject*

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;

13631390if (get_matcher_type(matcher_value, &matcher_type) <0) {

@@ -1367,7 +1394,7 @@ BaseExceptionGroup_subgroup(PyObject *self, PyObject *matcher_value)

13671394_exceptiongroup_split_resultsplit_result;

13681395boolconstruct_rest= false;

13691396if (exceptiongroup_split_recursive(

1370-self, matcher_type, matcher_value,

1397+(PyObject*)self, matcher_type, matcher_value,

13711398construct_rest, &split_result) <0) {

13721399returnNULL;

13731400 }

@@ -1633,9 +1660,9 @@ static PyMemberDef BaseExceptionGroup_members[] = {

16331660staticPyMethodDefBaseExceptionGroup_methods[] = {

16341661 {"__class_getitem__", (PyCFunction)Py_GenericAlias,

16351662METH_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