From 5323173dee1f20fc53c2df4707ec6d266534b748 Mon Sep 17 00:00:00 2001 From: Jesus Cea Date: Fri, 3 Aug 2012 14:18:11 +0200 Subject: [PATCH] Closes #15514: Correct __sizeof__ support for cpu_set --- Lib/test/test_posix.py | 6 ++++++ Misc/NEWS | 3 +++ Modules/posixmodule.c | 15 +++++++++++++++ 3 files changed, 24 insertions(+) diff --git a/Lib/test/test_posix.py b/Lib/test/test_posix.py index f0ad92f8ea7..0ea696b3e5b 100644 --- a/Lib/test/test_posix.py +++ b/Lib/test/test_posix.py @@ -1008,6 +1008,12 @@ class PosixTester(unittest.TestCase): self.assertIs(b, l) self.assertEqual(l.count(), 3) + @requires_sched_affinity + @support.cpython_only + def test_cpu_set_sizeof(self): + self.assertGreater(sys.getsizeof(posix.cpu_set(1000)), + sys.getsizeof(posix.cpu_set(1))) + def test_rtld_constants(self): # check presence of major RTLD_* constants posix.RTLD_LAZY diff --git a/Misc/NEWS b/Misc/NEWS index efa0eeaaae1..049231e14c6 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -373,6 +373,9 @@ Library - Issue #15487: Add a __sizeof__ implementation for buffered I/O objects. Patch by Serhiy Storchaka. +- Issue #15514: Correct __sizeof__ support for cpu_set. + Patch by Serhiy Storchaka. + - Issue #15187: Bugfix: remove temporary directories test_shutil was leaving behind. diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index bbf9baf2c60..ce10d1bea0d 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -5772,6 +5772,20 @@ cpu_set_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) return (PyObject *)make_new_cpu_set(type, size); } +PyDoc_STRVAR(cpu_set_sizeof_doc, +"cpu_set.__sizeof__() -> int\n\n\ +Returns size in memory, in bytes."); + +static PyObject * +cpu_set_sizeof(Py_cpu_set *set, PyObject *noargs) +{ + Py_ssize_t res = 0; + + res = sizeof(Py_cpu_set); + res += set->size; + return PyLong_FromSsize_t(res); +} + static PyObject * cpu_set_repr(Py_cpu_set *set) { @@ -5959,6 +5973,7 @@ static PyMethodDef cpu_set_methods[] = { {"isset", (PyCFunction)cpu_set_isset, METH_VARARGS, cpu_set_isset_doc}, {"set", (PyCFunction)cpu_set_set, METH_VARARGS, cpu_set_set_doc}, {"zero", (PyCFunction)cpu_set_zero, METH_NOARGS, cpu_set_zero_doc}, + {"__sizeof__", (PyCFunction)cpu_set_sizeof, METH_NOARGS, cpu_set_sizeof_doc}, {NULL, NULL} /* sentinel */ };