]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Closes #15514: Correct __sizeof__ support for cpu_set
authorJesus Cea <jcea@jcea.es>
Fri, 3 Aug 2012 12:18:11 +0000 (14:18 +0200)
committerJesus Cea <jcea@jcea.es>
Fri, 3 Aug 2012 12:18:11 +0000 (14:18 +0200)
Lib/test/test_posix.py
Misc/NEWS
Modules/posixmodule.c

index f0ad92f8ea7750594acf54bba61596ab22c714c4..0ea696b3e5b8d1aea9859033d759187ed0b6fd02 100644 (file)
@@ -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
index efa0eeaaae1adf20f741479003c6f60381f363eb..049231e14c6d3ceb06586048fd3d96113011b64d 100644 (file)
--- 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.
 
index bbf9baf2c6065d222ae4f2e3f69a9bffa40dc14b..ce10d1bea0d6d09d4a9013bfd9983ab2b1bfb63e 100644 (file)
@@ -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 */
 };