changeset: 92151:ca4a22256bf8 branch: 3.4 parent: 92148:66d6fa61ac38 user: Serhiy Storchaka date: Tue Aug 19 17:11:20 2014 +0300 files: Lib/test/test_mmap.py Misc/NEWS Modules/mmapmodule.c description: Issue #15696: Add a __sizeof__ implementation for mmap objects on Windows. diff -r 66d6fa61ac38 -r ca4a22256bf8 Lib/test/test_mmap.py --- a/Lib/test/test_mmap.py Mon Aug 18 17:47:29 2014 +0300 +++ b/Lib/test/test_mmap.py Tue Aug 19 17:11:20 2014 +0300 @@ -1,5 +1,5 @@ from test.support import (TESTFN, run_unittest, import_module, unlink, - requires, _2G, _4G, gc_collect) + requires, _2G, _4G, gc_collect, cpython_only) import unittest import os import re @@ -639,6 +639,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 -r 66d6fa61ac38 -r ca4a22256bf8 Misc/NEWS --- a/Misc/NEWS Mon Aug 18 17:47:29 2014 +0300 +++ b/Misc/NEWS Tue Aug 19 17:11:20 2014 +0300 @@ -27,6 +27,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 #22165: SimpleHTTPRequestHandler now supports undecodable file names. diff -r 66d6fa61ac38 -r ca4a22256bf8 Modules/mmapmodule.c --- a/Modules/mmapmodule.c Mon Aug 18 17:47:29 2014 +0300 +++ b/Modules/mmapmodule.c Tue Aug 19 17:11:20 2014 +0300 @@ -709,6 +709,19 @@ return _PyObject_CallMethodId(self, &PyId_close, NULL); } +#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}, @@ -726,6 +739,9 @@ {"write_byte", (PyCFunction) mmap_write_byte_method, METH_VARARGS}, {"__enter__", (PyCFunction) mmap__enter__method, METH_NOARGS}, {"__exit__", (PyCFunction) mmap__exit__method, METH_VARARGS}, +#ifdef MS_WINDOWS + {"__sizeof__", (PyCFunction) mmap__sizeof__method, METH_NOARGS}, +#endif {NULL, NULL} /* sentinel */ };

AltStyle によって変換されたページ (->オリジナル) /