]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix memory reservation on MS-Windows
authorEli Zaretskii <eliz@gnu.org>
Sat, 20 Feb 2016 16:59:14 +0000 (18:59 +0200)
committerEli Zaretskii <eliz@gnu.org>
Sat, 20 Feb 2016 16:59:14 +0000 (18:59 +0200)
* src/w32heap.c (mmap_alloc): Reserve memory in 64KB granular
units.  This avoids leaving gaps in reserved memory regions that
no one can use, since memory reservation must produce 64KB-aligned
addresses.  (Bug#22526)

src/w32heap.c

index 69706a3a57df05e5d24d5dfd20316ebdd6b3dc44..b908169b96c62896a635708754a8dc6b95f07465 100644 (file)
@@ -641,12 +641,14 @@ mmap_alloc (void **var, size_t nbytes)
      advance, and the buffer is enlarged several times as the data is
      decompressed on the fly.  */
   if (nbytes < MAX_BUFFER_SIZE)
-    p = VirtualAlloc (NULL, (nbytes * 2), MEM_RESERVE, PAGE_READWRITE);
+    p = VirtualAlloc (NULL, ROUND_UP (nbytes * 2, get_allocation_unit ()),
+                     MEM_RESERVE, PAGE_READWRITE);
 
   /* If it fails, or if the request is above 512MB, try with the
      requested size.  */
   if (p == NULL)
-    p = VirtualAlloc (NULL, nbytes, MEM_RESERVE, PAGE_READWRITE);
+    p = VirtualAlloc (NULL, ROUND_UP (nbytes, get_allocation_unit ()),
+                     MEM_RESERVE, PAGE_READWRITE);
 
   if (p != NULL)
     {