[Python-checkins] cpython (2.7): Issue #15696: Add a __sizeof__ implementation for mmap objects on Windows.

serhiy.storchaka python-checkins at python.org
Tue Aug 19 16:52:18 CEST 2014


http://hg.python.org/cpython/rev/4aba144b752d
changeset:   92150:4aba144b752d
branch:      2.7
parent:      92147:5c54f3818efd
user:        Serhiy Storchaka <storchaka at gmail.com>
date:        Tue Aug 19 17:03:42 2014 +0300
summary:
  Issue #15696: Add a __sizeof__ implementation for mmap objects on Windows.

files:
  Lib/test/test_mmap.py |  11 ++++++++++-
  Misc/NEWS             |   2 ++
  Modules/mmapmodule.c  |  16 ++++++++++++++++
  3 files changed, 28 insertions(+), 1 deletions(-)


diff --git a/Lib/test/test_mmap.py b/Lib/test/test_mmap.py
--- a/Lib/test/test_mmap.py
+++ b/Lib/test/test_mmap.py
@@ -1,5 +1,5 @@
 from test.test_support import (TESTFN, run_unittest, import_module, unlink,
-                               requires, _2G, _4G)
+                               requires, _2G, _4G, gc_collect, cpython_only)
 import unittest
 import os, re, itertools, socket, sys
 
@@ -606,6 +606,15 @@
         m2.close()
         m1.close()
 
+    @cpython_only
+    @unittest.skipUnless(os.name == 'nt', 'requires Windows')
+    def test_sizeof(self):
+        m1 = mmap.mmap(-1, 100)
+        tagname = "foo"
+        m2 = mmap.mmap(-1, 100, tagname=tagname)
+        self.assertEqual(sys.getsize(m2),
+                         sys.getsize(m1) + len(tagname) + 1)
+
     @unittest.skipUnless(os.name == 'nt', 'requires Windows')
     def test_crasher_on_windows(self):
         # Should not crash (Issue 1733986)
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -19,6 +19,8 @@
 Library
 -------
 
+- Issue #15696: Add a __sizeof__ implementation for mmap objects on Windows.
+
 - Issue #22068: Avoided reference loops with Variables and Fonts in Tkinter.
 
 - Issue #21448: Changed FeedParser feed() to avoid O(N**2) behavior when
diff --git a/Modules/mmapmodule.c b/Modules/mmapmodule.c
--- a/Modules/mmapmodule.c
+++ b/Modules/mmapmodule.c
@@ -649,6 +649,19 @@
     }
 }
 
+#ifdef MS_WINDOWS
+static PyObject *
+mmap__sizeof__method(mmap_object *self, void *unused)
+{
+    Py_ssize_t res;
+
+    res = sizeof(mmap_object);
+    if (self->tagname)
+        res += strlen(self->tagname) + 1;
+    return PyLong_FromSsize_t(res);
+}
+#endif
+
 static struct PyMethodDef mmap_object_methods[] = {
     {"close",           (PyCFunction) mmap_close_method,        METH_NOARGS},
     {"find",            (PyCFunction) mmap_find_method,         METH_VARARGS},
@@ -664,6 +677,9 @@
     {"tell",            (PyCFunction) mmap_tell_method,         METH_NOARGS},
     {"write",           (PyCFunction) mmap_write_method,        METH_VARARGS},
     {"write_byte",      (PyCFunction) mmap_write_byte_method,   METH_VARARGS},
+#ifdef MS_WINDOWS
+    {"__sizeof__",      (PyCFunction) mmap__sizeof__method,     METH_NOARGS},
+#endif
     {NULL,         NULL}       /* sentinel */
 };
 

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list