From dc4d05690e6495833fe4fff478b7ce416db00afe Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Fri, 28 May 2004 03:48:09 +0000 Subject: [PATCH] Don't rely on the reserved area list being empty in reserve_area, since the preloader will need to add things to the list before startup. --- dlls/ntdll/virtual.c | 2 ++ libs/wine/mmap.c | 28 ++-------------------------- 2 files changed, 4 insertions(+), 26 deletions(-) diff --git a/dlls/ntdll/virtual.c b/dlls/ntdll/virtual.c index f61fa5cb643..64d4ff065d2 100644 --- a/dlls/ntdll/virtual.c +++ b/dlls/ntdll/virtual.c @@ -266,6 +266,8 @@ static void add_reserved_area( void *addr, size_t size ) size -= (char *)USER_SPACE_LIMIT - (char *)addr; addr = USER_SPACE_LIMIT; } + /* blow away existing mappings */ + wine_anon_mmap( addr, size, PROT_NONE, MAP_NORESERVE | MAP_FIXED ); wine_mmap_add_reserved_area( addr, size ); } diff --git a/libs/wine/mmap.c b/libs/wine/mmap.c index b3edee0e793..e52d0e36d55 100644 --- a/libs/wine/mmap.c +++ b/libs/wine/mmap.c @@ -201,32 +201,13 @@ static void reserve_area( void *addr, void *end ) { void *ptr; size_t size = (char *)end - (char *)addr; - struct list *prev; - struct reserved_area *area; if ((ptr = wine_anon_mmap( addr, size, PROT_NONE, MAP_NORESERVE )) != (void *)-1) { if (ptr == addr) { - if (!end) size--; /* avoid wrap-around */ - /* try to merge it with the previous one */ - if ((prev = list_tail( &reserved_areas ))) - { - area = LIST_ENTRY( prev, struct reserved_area, entry ); - if (area && (char *)area->base + area->size == (char *)ptr) - { - area->size += size; - return; - } - } - /* create a new area */ - if ((area = malloc( sizeof(*area) ))) - { - area->base = addr; - area->size = size; - list_add_tail( &reserved_areas, &area->entry ); - return; - } + wine_mmap_add_reserved_area( addr, size ); + return; } else munmap( ptr, size ); } @@ -287,11 +268,6 @@ void wine_mmap_add_reserved_area( void *addr, size_t size ) if (!((char *)addr + size)) size--; /* avoid wrap-around */ -#ifdef HAVE_MMAP - /* blow away existing mappings */ - wine_anon_mmap( addr, size, PROT_NONE, MAP_NORESERVE | MAP_FIXED ); -#endif - LIST_FOR_EACH( ptr, &reserved_areas ) { area = LIST_ENTRY( ptr, struct reserved_area, entry );