@@ -930,13 +930,16 @@ mmap_tell_method(PyObject *op, PyObject *Py_UNUSED(ignored))
930930}
931931
932932static PyObject *
933- mmap_flush_method (PyObject * op , PyObject * args )
933+ mmap_flush_method (PyObject * op , PyObject * args , PyObject * kwargs )
934934{
935935 Py_ssize_t offset = 0 ;
936936 Py_ssize_t size = -1 ;
937+ int flags = MS_SYNC ;
937938 mmap_object * self = mmap_object_CAST (op );
939+ static char * kwlist [] = {"offset" , "size" , "flags" , NULL };
938940 CHECK_VALID (NULL );
939- if (!PyArg_ParseTuple (args , "|nn:flush" , & offset , & size )) {
941+ if (!PyArg_ParseTupleAndKeywords (args , kwargs , "|nn$i:flush" , kwlist ,
942+ & offset , & size , & flags )) {
940943 return NULL ;
941944 }
942945 if (size == -1 ) {
@@ -957,8 +960,7 @@ mmap_flush_method(PyObject *op, PyObject *args)
957960 }
958961 Py_RETURN_NONE ;
959962#elif defined(UNIX )
960- /* XXX flags for msync? */
961- if (-1 == msync (self -> data + offset , size , MS_SYNC )) {
963+ if (-1 == msync (self -> data + offset , size , flags )) {
962964 PyErr_SetFromErrno (PyExc_OSError );
963965 return NULL ;
964966 }
@@ -1203,7 +1205,7 @@ static struct PyMethodDef mmap_object_methods[] = {
12031205 {"close" , mmap_close_method , METH_NOARGS },
12041206 {"find" , mmap_find_method , METH_VARARGS },
12051207 {"rfind" , mmap_rfind_method , METH_VARARGS },
1206- {"flush" , mmap_flush_method , METH_VARARGS },
1208+ {"flush" , _PyCFunction_CAST ( mmap_flush_method ), METH_VARARGS | METH_KEYWORDS },
12071209#ifdef HAVE_MADVISE
12081210 {"madvise" , mmap_madvise_method , METH_VARARGS },
12091211#endif
@@ -2047,6 +2049,16 @@ mmap_exec(PyObject *module)
20472049 ADD_INT_MACRO (module , ACCESS_WRITE );
20482050 ADD_INT_MACRO (module , ACCESS_COPY );
20492051
2052+ #ifdef MS_INVALIDATE
2053+ ADD_INT_MACRO (module , MS_INVALIDATE );
2054+ #endif
2055+ #ifdef MS_ASYNC
2056+ ADD_INT_MACRO (module , MS_ASYNC );
2057+ #endif
2058+ #ifdef MS_SYNC
2059+ ADD_INT_MACRO (module , MS_SYNC );
2060+ #endif
2061+
20502062#ifdef HAVE_MADVISE
20512063 // Conventional advice values
20522064#ifdef MADV_NORMAL
0 commit comments