diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2014-08-12 19:50:14 +0200 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2014-08-12 19:50:14 +0200 |
commit | bba644fbd13df10c93fbac4fc15e740262448e4c (patch) | |
tree | 1eaacd127b5be7c70526775ddd86e73910bbce42 /lib | |
parent | 4d863ebb5e0dfc2531837925199a5d9cd6cdaab8 (diff) | |
parent | a0df72fcdc8c180b14d4e030c083a6ef1b5320b3 (diff) | |
download | Nim-bba644fbd13df10c93fbac4fc15e740262448e4c.tar.gz |
Merge pull request #1405 from boydgreenfield/add_mmap_map_populate
Add mmap map populate
Diffstat (limited to 'lib')
-rw-r--r-- | lib/posix/posix.nim | 10 | ||||
-rw-r--r-- | lib/pure/memfiles.nim | 4 |
2 files changed, 12 insertions, 2 deletions
diff --git a/lib/posix/posix.nim b/lib/posix/posix.nim index a5ee05abb..e1bcd9dfc 100644 --- a/lib/posix/posix.nim +++ b/lib/posix/posix.nim @@ -1579,6 +1579,16 @@ var MSG_OOB* {.importc, header: "<sys/socket.h>".}: cint ## Out-of-band data. + +when defined(linux): + var + MAP_POPULATE* {.importc, header: "<sys/mman.h>".}: cint + ## Populate (prefault) page tables for a mapping. +else: + var + MAP_POPULATE*: cint = 0 + + when defined(macosx): var MSG_HAVEMORE* {.importc, header: "<sys/socket.h>".}: cint diff --git a/lib/pure/memfiles.nim b/lib/pure/memfiles.nim index 31fefc6c8..ffeb0beff 100644 --- a/lib/pure/memfiles.nim +++ b/lib/pure/memfiles.nim @@ -54,7 +54,7 @@ proc mapMem*(m: var TMemFile, mode: TFileMode = fmRead, nil, mappedSize, if readonly: PROT_READ else: PROT_READ or PROT_WRITE, - if readonly: MAP_PRIVATE else: MAP_SHARED, + if readonly: (MAP_PRIVATE or MAP_POPULATE) else: (MAP_SHARED or MAP_POPULATE), m.handle, offset) if result == cast[pointer](MAP_FAILED): osError(osLastError()) @@ -207,7 +207,7 @@ proc open*(filename: string, mode: TFileMode = fmRead, nil, result.size, if readonly: PROT_READ else: PROT_READ or PROT_WRITE, - if readonly: MAP_PRIVATE else: MAP_SHARED, + if readonly: (MAP_PRIVATE or MAP_POPULATE) else: (MAP_SHARED or MAP_POPULATE), result.handle, offset) |