Commit 112d48ac authored by Victor Stinner's avatar Victor Stinner

(Merge 3.1) Issue #11277: mmap.mmap() calls fcntl(fd, F_FULLFSYNC) on Mac OS X

to get around a mmap bug with sparse files. Patch written by Steffen Daode
Nurpmeso.
parent cfa84830
......@@ -94,6 +94,10 @@ memory but does not update the underlying file.
defaults to 0. *offset* must be a multiple of the PAGESIZE or
ALLOCATIONGRANULARITY.
To ensure validity of the created memory mapping the file specified
by the descriptor *fileno* is internally automatically synchronized
with physical backing store on Mac OS X and OpenVMS.
This example shows a simple way of using :class:`mmap`::
import mmap
......
......@@ -70,6 +70,9 @@ Core and Builtins
Library
-------
- Issue #11277: mmap.mmap() calls fcntl(fd, F_FULLFSYNC) on Mac OS X to get
around a mmap bug with sparse files. Patch written by Steffen Daode Nurpmeso.
- Issue #10761: Fix tarfile.extractall failure when symlinked files are
present. Initial patch by Scott Leerssen.
......
......@@ -23,6 +23,9 @@
#ifndef MS_WINDOWS
#define UNIX
# ifdef __APPLE__
# include <fcntl.h>
# endif
#endif
#ifdef MS_WINDOWS
......@@ -1170,6 +1173,12 @@ new_mmap_object(PyTypeObject *type, PyObject *args, PyObject *kwdict)
"mmap invalid access parameter.");
}
#ifdef __APPLE__
/* Issue #11277: fsync(2) is not enough on OS X - a special, OS X specific
fcntl(2) is necessary to force DISKSYNC and get around mmap(2) bug */
if (fd != -1)
(void)fcntl(fd, F_FULLFSYNC);
#endif
#ifdef HAVE_FSTAT
# ifdef __VMS
/* on OpenVMS we must ensure that all bytes are written to the file */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment