diff options
author | Nick Greenfield <boyd.greenfield@gmail.com> | 2014-07-23 11:31:03 -0700 |
---|---|---|
committer | Nick Greenfield <boyd.greenfield@gmail.com> | 2014-07-23 11:31:03 -0700 |
commit | cba75db4e36b3af0d39b5717141a971e6d558554 (patch) | |
tree | 8be81cd08c8569f92fe135dc88e3057ffbd7a047 /lib | |
parent | 272fd42c970d48d526f0d5ab8dc4fef4d8f177e7 (diff) | |
download | Nim-cba75db4e36b3af0d39b5717141a971e6d558554.tar.gz |
Do not automatically use MAP_POPULATE for opening mmap files.
Adds use_map_populate keyword to memfiles.open and memfiles.mapMem to govern MAP_POPULATE use. This is set to false by default.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pure/memfiles.nim | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/lib/pure/memfiles.nim b/lib/pure/memfiles.nim index ffeb0beff..06f2c215e 100644 --- a/lib/pure/memfiles.nim +++ b/lib/pure/memfiles.nim @@ -30,14 +30,17 @@ type when defined(windows): fHandle: int - mapHandle: int + mapHandle: int else: handle: cint proc mapMem*(m: var TMemFile, mode: TFileMode = fmRead, - mappedSize = -1, offset = 0): pointer = + mappedSize = -1, offset = 0, + use_map_populate = false): pointer = var readonly = mode == fmRead + if not use_map_populate: + MAP_POPULATE = 0 when defined(windows): result = mapViewOfFileEx( m.mapHandle, @@ -72,7 +75,8 @@ proc unmapMem*(f: var TMemFile, p: pointer, size: int) = proc open*(filename: string, mode: TFileMode = fmRead, - mappedSize = -1, offset = 0, newFileSize = -1): TMemFile = + mappedSize = -1, offset = 0, newFileSize = -1, + use_map_populate = false): TMemFile = ## opens a memory mapped file. If this fails, ``EOS`` is raised. ## `newFileSize` can only be set if the file does not exist and is opened ## with write access (e.g., with fmReadWrite). `mappedSize` and `offset` @@ -94,6 +98,8 @@ proc open*(filename: string, mode: TFileMode = fmRead, # The file can be resized only when write mode is used: assert newFileSize == -1 or mode != fmRead var readonly = mode == fmRead + if not use_map_populate: + MAP_POPULATE = 0 template rollback = result.mem = nil |