diff -r ba1c48f8b571 Lib/test/test_mmap.py --- a/Lib/test/test_mmap.py Wed Aug 15 23:16:51 2012 +0200 +++ b/Lib/test/test_mmap.py Thu Aug 16 22:27:57 2012 +0300 @@ -1,5 +1,5 @@ from test.test_support import (TESTFN, run_unittest, import_module, unlink, - requires, _2G, _4G) + requires, _2G, _4G, cpython_only) import unittest import os, re, itertools, socket, sys @@ -601,6 +601,14 @@ m2.close() m1.close() + @cpython_only + 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) + def test_crasher_on_windows(self): # Should not crash (Issue 1733986) m = mmap.mmap(-1, 1000, tagname="foo") diff -r ba1c48f8b571 Modules/mmapmodule.c --- a/Modules/mmapmodule.c Wed Aug 15 23:16:51 2012 +0200 +++ b/Modules/mmapmodule.c Thu Aug 16 22:27:57 2012 +0300 @@ -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 */ };