From: Erlend Egeberg Aasland Date: Fri, 30 Apr 2021 13:49:17 +0000 (+0200) Subject: bpo-43916: select.poll uses Py_TPFLAGS_DISALLOW_INSTANTIATION (GH-25750) X-Git-Tag: v3.10.0b1~71 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=387397f8a4244c983f4568c16a28842e3268fe5d;p=thirdparty%2FPython%2Fcpython.git bpo-43916: select.poll uses Py_TPFLAGS_DISALLOW_INSTANTIATION (GH-25750) --- diff --git a/Lib/test/test_select.py b/Lib/test/test_select.py index f63564e6b0ee..1ef562435498 100644 --- a/Lib/test/test_select.py +++ b/Lib/test/test_select.py @@ -87,6 +87,10 @@ class SelectTestCase(unittest.TestCase): a[:] = [F()] * 10 self.assertEqual(select.select([], a, []), ([], a[:5], [])) + def test_disallow_instantiation(self): + tp = type(select.poll()) + self.assertRaises(TypeError, tp) + def tearDownModule(): support.reap_children() diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c index f80da5895401..5038c325faa4 100644 --- a/Modules/selectmodule.c +++ b/Modules/selectmodule.c @@ -728,13 +728,6 @@ newPollObject(PyObject *module) return self; } -static PyObject * -poll_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) -{ - PyErr_Format(PyExc_TypeError, "Cannot create '%.200s' instances", _PyType_Name(type)); - return NULL; -} - static void poll_dealloc(pollObject *self) { @@ -2275,16 +2268,14 @@ static PyMethodDef poll_methods[] = { static PyType_Slot poll_Type_slots[] = { {Py_tp_dealloc, poll_dealloc}, {Py_tp_methods, poll_methods}, - {Py_tp_new, poll_new}, {0, 0}, }; static PyType_Spec poll_Type_spec = { - "select.poll", - sizeof(pollObject), - 0, - Py_TPFLAGS_DEFAULT, - poll_Type_slots + .name = "select.poll", + .basicsize = sizeof(pollObject), + .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION, + .slots = poll_Type_slots, }; #ifdef HAVE_SYS_DEVPOLL_H