Fix: don't use overlapping mmap mappings on Cygwin
authorMichael Jeanson <mjeanson@efficios.com>
Fri, 28 Jul 2017 15:51:15 +0000 (11:51 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Tue, 7 Nov 2017 22:08:49 +0000 (17:08 -0500)
commit387346f055709e2a866f2f52bf590b50e554e684
tree890f16f34f51ccadde967ddaabd4d3e9cad39ffd
parentd4dae7fc4a6fcb4c88c65a2445ee1ddc7a8ac500
Fix: don't use overlapping mmap mappings on Cygwin

The allocation scheme used by the mmap based RCU hash table is to make a
large unaccessible mapping to reserve memory without allocating it.
Then smaller chunks are allocated by overlapping read/write mappings which
do allocate memory. Deallocation is done by an overlapping unaccessible
mapping.

This scheme was tested on Linux, macOS and Solaris. However, on Cygwin the
mmap wrapper is based on the Windows NtMapViewOfSection API which doesn't
support overlapping mappings.

An alternative to the overlapping mappings is to use mprotect to change the
protection on chunks of the large mapping, read/write to allocate and none
to deallocate. This works perfecty on Cygwin and Solaris but on Linux a
call to madvise is also required to deallocate and it just doesn't work on
macOS.

For this reason, we keep to original scheme on all platforms except Cygwin.

Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
rculfhash-mm-mmap.c
This page took 0.025193 seconds and 4 git commands to generate.