[newlib-cygwin] Cygwin: timerfd: reduce size of shared mem region to a single page

Corinna Vinschen corinna@sourceware.org
Tue Feb 26 09:46:00 GMT 2019


https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=5a483b6bcac263102df890c3172ecddf23fc9f53

commit 5a483b6bcac263102df890c3172ecddf23fc9f53
Author: Corinna Vinschen <corinna@vinschen.de>
Date:   Tue Feb 26 10:19:08 2019 +0100

    Cygwin: timerfd: reduce size of shared mem region to a single page
    
    The share section was created using the PAGE_SIZE constant,
    but PAGE_SIZE is 64K.  Fix that by using wincap.page_size()
    instead, which returns the desired actual page size of 4K.
    
    Signed-off-by: Corinna Vinschen <corinna@vinschen.de>

Diff:
---
 winsup/cygwin/timerfd.cc | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/winsup/cygwin/timerfd.cc b/winsup/cygwin/timerfd.cc
index 418e71b..b0d4db9 100644
--- a/winsup/cygwin/timerfd.cc
+++ b/winsup/cygwin/timerfd.cc
@@ -210,8 +210,8 @@ timerfd_tracker::create (clockid_t clock_id)
 
   const ACCESS_MASK access = STANDARD_RIGHTS_REQUIRED
 			     | SECTION_MAP_READ | SECTION_MAP_WRITE;
-  SIZE_T vsize = PAGE_SIZE;
-  LARGE_INTEGER sectionsize = { QuadPart: PAGE_SIZE };
+  SIZE_T vsize = wincap.page_size ();
+  LARGE_INTEGER sectionsize = { QuadPart: (LONGLONG) wincap.page_size () };
 
   /* Valid clock? */
   if (!get_clock (clock_id))
@@ -290,7 +290,7 @@ timerfd_tracker::create (clockid_t clock_id)
   /* Create section mapping (has to be recreated after fork/exec) */
   tfd_shared = NULL;
   status = NtMapViewOfSection (tfd_shared_hdl, NtCurrentProcess (),
-			       (void **) &tfd_shared, 0, PAGE_SIZE, NULL,
+			       (void **) &tfd_shared, 0, vsize, NULL,
 			       &vsize, ViewShare, 0, PAGE_READWRITE);
   if (!NT_SUCCESS (status))
     {
@@ -397,7 +397,7 @@ timerfd_tracker::fixup_after_fork_exec (bool execing)
 {
   NTSTATUS status;
   OBJECT_ATTRIBUTES attr;
-  SIZE_T vsize = PAGE_SIZE;
+  SIZE_T vsize = wincap.page_size ();
 
   /* Run this only once per process */
   if (winpid == GetCurrentProcessId ())
@@ -405,7 +405,7 @@ timerfd_tracker::fixup_after_fork_exec (bool execing)
   /* Recreate shared section mapping */
   tfd_shared = NULL;
   status = NtMapViewOfSection (tfd_shared_hdl, NtCurrentProcess (),
-			       (PVOID *) &tfd_shared, 0, PAGE_SIZE, NULL,
+			       (PVOID *) &tfd_shared, 0, vsize, NULL,
 			       &vsize, ViewShare, 0, PAGE_READWRITE);
   if (!NT_SUCCESS (status))
     api_fatal ("Can't recreate shared timerfd section during %s, status %y!",



More information about the Cygwin-cvs mailing list