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.
This commit is contained in:
parent
272fd42c97
commit
cba75db4e3
1 changed files with 9 additions and 3 deletions
|
|
@ -36,8 +36,11 @@ type
|
||||||
|
|
||||||
|
|
||||||
proc mapMem*(m: var TMemFile, mode: TFileMode = fmRead,
|
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
|
var readonly = mode == fmRead
|
||||||
|
if not use_map_populate:
|
||||||
|
MAP_POPULATE = 0
|
||||||
when defined(windows):
|
when defined(windows):
|
||||||
result = mapViewOfFileEx(
|
result = mapViewOfFileEx(
|
||||||
m.mapHandle,
|
m.mapHandle,
|
||||||
|
|
@ -72,7 +75,8 @@ proc unmapMem*(f: var TMemFile, p: pointer, size: int) =
|
||||||
|
|
||||||
|
|
||||||
proc open*(filename: string, mode: TFileMode = fmRead,
|
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.
|
## 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
|
## `newFileSize` can only be set if the file does not exist and is opened
|
||||||
## with write access (e.g., with fmReadWrite). `mappedSize` and `offset`
|
## 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:
|
# The file can be resized only when write mode is used:
|
||||||
assert newFileSize == -1 or mode != fmRead
|
assert newFileSize == -1 or mode != fmRead
|
||||||
var readonly = mode == fmRead
|
var readonly = mode == fmRead
|
||||||
|
if not use_map_populate:
|
||||||
|
MAP_POPULATE = 0
|
||||||
|
|
||||||
template rollback =
|
template rollback =
|
||||||
result.mem = nil
|
result.mem = nil
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue