summaryrefslogtreecommitdiff
path: root/src/w32heap.c
diff options
context:
space:
mode:
authorEli Zaretskii <eliz@gnu.org>2016-02-20 18:59:14 +0200
committerEli Zaretskii <eliz@gnu.org>2016-02-20 18:59:14 +0200
commitea0b604412d6b33353839640f7d5e5e0b62a45ad (patch)
treea5f65e997c9276f6ae6e788c28d2fc8c9ace5b0c /src/w32heap.c
parentc5f72aa573bc45b82ad6479ae0eba5ffc7916fb9 (diff)
downloademacs-ea0b604412d6b33353839640f7d5e5e0b62a45ad.tar.gz
Fix memory reservation on MS-Windows
* 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)
Diffstat (limited to 'src/w32heap.c')
-rw-r--r--src/w32heap.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/w32heap.c b/src/w32heap.c
index 69706a3a57d..b908169b96c 100644
--- a/src/w32heap.c
+++ b/src/w32heap.c
@@ -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)
{