Issue #15696: Add a __sizeof__ implementation for mmap objects on Windows.
This commit is contained in:
parent
d6ec309c36
commit
76b47655ff
|
@ -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 @@ class MmapTests(unittest.TestCase):
|
|||
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)
|
||||
|
|
|
@ -27,6 +27,8 @@ Core and Builtins
|
|||
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.
|
||||
|
|
|
@ -709,6 +709,19 @@ mmap__exit__method(PyObject *self, PyObject *args)
|
|||
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 @@ static struct PyMethodDef mmap_object_methods[] = {
|
|||
{"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 */
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue