https://github.com/python/cpython/commit/e77d6784e754d9d656238bb5691534857598c000 commit: e77d6784e754d9d656238bb5691534857598c000 branch: main author: Pieter Eendebak <pieter.eende...@gmail.com> committer: kumaraditya303 <kumaradi...@python.org> date: 2025-04-18T20:20:29+05:30 summary:
gh-132657: Avoid locking in frozenset.__contains__ (#132659) files: M Objects/clinic/setobject.c.h M Objects/setobject.c diff --git a/Objects/clinic/setobject.c.h b/Objects/clinic/setobject.c.h index 96c70d0ae95a46..488be4435f81d7 100644 --- a/Objects/clinic/setobject.c.h +++ b/Objects/clinic/setobject.c.h @@ -432,6 +432,28 @@ set___contains__(PyObject *so, PyObject *key) return return_value; } +PyDoc_STRVAR(frozenset___contains____doc__, +"__contains__($self, object, /)\n" +"--\n" +"\n" +"x.__contains__(y) <==> y in x."); + +#define FROZENSET___CONTAINS___METHODDEF \ + {"__contains__", (PyCFunction)frozenset___contains__, METH_O|METH_COEXIST, frozenset___contains____doc__}, + +static PyObject * +frozenset___contains___impl(PySetObject *so, PyObject *key); + +static PyObject * +frozenset___contains__(PyObject *so, PyObject *key) +{ + PyObject *return_value = NULL; + + return_value = frozenset___contains___impl((PySetObject *)so, key); + + return return_value; +} + PyDoc_STRVAR(set_remove__doc__, "remove($self, object, /)\n" "--\n" @@ -532,4 +554,4 @@ set___sizeof__(PyObject *so, PyObject *Py_UNUSED(ignored)) return return_value; } -/*[clinic end generated code: output=e2f1470de062d661 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=7f7fe845ca165078 input=a9049054013a1b77]*/ diff --git a/Objects/setobject.c b/Objects/setobject.c index acbb53aafc0a26..347888389b8dcd 100644 --- a/Objects/setobject.c +++ b/Objects/setobject.c @@ -2253,6 +2253,28 @@ set___contains___impl(PySetObject *so, PyObject *key) return PyBool_FromLong(result); } +/*[clinic input] +@coexist +frozenset.__contains__ + so: setobject + object as key: object + / + +x.__contains__(y) <==> y in x. +[clinic start generated code]*/ + +static PyObject * +frozenset___contains___impl(PySetObject *so, PyObject *key) +/*[clinic end generated code: output=2301ed91bc3a6dd5 input=2f04922a98d8bab7]*/ +{ + long result; + + result = set_contains_lock_held(so, key); + if (result < 0) + return NULL; + return PyBool_FromLong(result); +} + /*[clinic input] @critical_section set.remove @@ -2555,7 +2577,7 @@ PyTypeObject PySet_Type = { static PyMethodDef frozenset_methods[] = { - SET___CONTAINS___METHODDEF + FROZENSET___CONTAINS___METHODDEF FROZENSET_COPY_METHODDEF SET_DIFFERENCE_MULTI_METHODDEF SET_INTERSECTION_MULTI_METHODDEF _______________________________________________ Python-checkins mailing list -- python-checkins@python.org To unsubscribe send an email to python-checkins-le...@python.org https://mail.python.org/mailman3/lists/python-checkins.python.org/ Member address: arch...@mail-archive.com