From: Michael Jeanson Date: Fri, 28 Jul 2017 15:51:15 +0000 (-0400) Subject: Fix: don't use overlapping mmap mappings on Cygwin X-Git-Tag: v0.9.5~1 X-Git-Url: http://git.liburcu.org/?a=commitdiff_plain;h=387346f055709e2a866f2f52bf590b50e554e684;hp=387346f055709e2a866f2f52bf590b50e554e684;p=userspace-rcu.git 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 Signed-off-by: Mathieu Desnoyers ---