Hi Ken,

On 12/21/2024 1:42 PM, Ken Brown wrote:
I'm wondering why munmap insists on operating with chunks of size 64k instead of pages of size 4k.  In other words, what would go wrong if we did the following:

--- a/winsup/cygwin/mm/mmap.cc
+++ b/winsup/cygwin/mm/mmap.cc
@@ -1143,7 +1143,7 @@ munmap (void *addr, size_t len)
        set_errno (EINVAL);
        return -1;
      }
-  const size_t pagesize = wincap.allocation_granularity ();
+  const size_t pagesize = wincap.page_size ();
    if (((uintptr_t) addr % pagesize) || !len)
      {
        set_errno (EINVAL);

I'm currently testing a build with this patch, and so far I haven't seen any problems.  But maybe I don't know what to test.

I'm afraid I don't remember the circumstances, but the change from 4K pages to 64K was done somewhat recently. In the last 2-3 years IIRC.

Maybe check the git history of mmap.cc for clues? Some corner case of how Windows manages page protection wasn't allowing the desired POSIX and/or Linux behavior?
HTH,

..mark

Reply via email to