mirror of
https://github.com/python/cpython.git
synced 2026-03-30 00:21:21 +00:00
gh-138092: Allow calling mmap.flush with offset only (#138093)
This commit is contained in:
parent
6b5f15698a
commit
bd1ada6df3
4 changed files with 27 additions and 4 deletions
|
|
@ -212,8 +212,7 @@ To map anonymous memory, -1 should be passed as the fileno along with the length
|
|||
Writable :term:`bytes-like object` is now accepted.
|
||||
|
||||
|
||||
.. method:: flush()
|
||||
flush(offset, size, /)
|
||||
.. method:: flush([offset[, size]])
|
||||
|
||||
Flushes changes made to the in-memory copy of a file back to disk. Without
|
||||
use of this call there is no guarantee that changes are written back before
|
||||
|
|
@ -230,6 +229,12 @@ To map anonymous memory, -1 should be passed as the fileno along with the length
|
|||
on error under Windows. A zero value was returned on success; an
|
||||
exception was raised on error under Unix.
|
||||
|
||||
.. versionchanged:: next
|
||||
Allow specifying *offset* without *size*. Previously, both *offset*
|
||||
and *size* parameters were required together. Now *offset* can be
|
||||
specified alone, and the flush operation will extend from *offset*
|
||||
to the end of the mmap.
|
||||
|
||||
|
||||
.. method:: madvise(option[, start[, length]])
|
||||
|
||||
|
|
|
|||
|
|
@ -1145,6 +1145,18 @@ def test_access_violations(self):
|
|||
self.assertEqual(stdout.strip(), b'')
|
||||
self.assertEqual(stderr.strip(), b'')
|
||||
|
||||
def test_flush_parameters(self):
|
||||
with open(TESTFN, 'wb+') as f:
|
||||
f.write(b'x' * PAGESIZE * 3)
|
||||
f.flush()
|
||||
|
||||
m = mmap.mmap(f.fileno(), PAGESIZE * 3)
|
||||
self.addCleanup(m.close)
|
||||
|
||||
m.flush()
|
||||
m.flush(PAGESIZE)
|
||||
m.flush(PAGESIZE, PAGESIZE)
|
||||
|
||||
|
||||
class LargeMmapTests(unittest.TestCase):
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,2 @@
|
|||
Fixed a bug in :meth:`mmap.mmap.flush` where calling with only an offset
|
||||
parameter would fail.
|
||||
|
|
@ -933,11 +933,15 @@ static PyObject *
|
|||
mmap_flush_method(PyObject *op, PyObject *args)
|
||||
{
|
||||
Py_ssize_t offset = 0;
|
||||
Py_ssize_t size = -1;
|
||||
mmap_object *self = mmap_object_CAST(op);
|
||||
Py_ssize_t size = self->size;
|
||||
CHECK_VALID(NULL);
|
||||
if (!PyArg_ParseTuple(args, "|nn:flush", &offset, &size))
|
||||
if (!PyArg_ParseTuple(args, "|nn:flush", &offset, &size)) {
|
||||
return NULL;
|
||||
}
|
||||
if (size == -1) {
|
||||
size = self->size - offset;
|
||||
}
|
||||
if (size < 0 || offset < 0 || self->size - offset < size) {
|
||||
PyErr_SetString(PyExc_ValueError, "flush values out of range");
|
||||
return NULL;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue