[Python-checkins] cpython (3.1): Issue #11277: mmap calls fcntl(fd, F_FULLFSYNC) on Mac OS X to get around a
victor.stinner
python-checkins at python.org
Mon May 2 01:15:30 CEST 2011
http://hg.python.org/cpython/rev/cb464f8fb3a1
changeset: 69753:cb464f8fb3a1
branch: 3.1
parent: 69749:dc65d1b99dff
user: Victor Stinner <victor.stinner at haypocalc.com>
date: Mon May 02 01:05:37 2011 +0200
summary:
Issue #11277: 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.
files:
Doc/library/mmap.rst | 4 ++++
Lib/test/test_zlib.py | 2 +-
Misc/NEWS | 3 +++
Modules/mmapmodule.c | 9 +++++++++
4 files changed, 17 insertions(+), 1 deletions(-)
diff --git a/Doc/library/mmap.rst b/Doc/library/mmap.rst
--- a/Doc/library/mmap.rst
+++ b/Doc/library/mmap.rst
@@ -86,6 +86,10 @@
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
diff --git a/Lib/test/test_zlib.py b/Lib/test/test_zlib.py
--- a/Lib/test/test_zlib.py
+++ b/Lib/test/test_zlib.py
@@ -74,7 +74,7 @@
with open(support.TESTFN, "wb+") as f:
f.seek(_4G)
f.write(b"asdf")
- with open(support.TESTFN, "rb") as f:
+ f.flush()
self.mapping = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ)
def tearDown(self):
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -66,6 +66,9 @@
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 #11763: don't use difflib in TestCase.assertMultiLineEqual if the
strings are too long.
diff --git a/Modules/mmapmodule.c b/Modules/mmapmodule.c
--- a/Modules/mmapmodule.c
+++ b/Modules/mmapmodule.c
@@ -23,6 +23,9 @@
#ifndef MS_WINDOWS
#define UNIX
+# ifdef __APPLE__
+# include <fcntl.h>
+# endif
#endif
#ifdef MS_WINDOWS
@@ -1091,6 +1094,12 @@
"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 */
--
Repository URL: http://hg.python.org/cpython
More information about the Python-checkins
mailing list