Commit dc4d0569 authored by Alexandre Julliard's avatar Alexandre Julliard

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.
parent f974c859
......@@ -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 );
}
......
......@@ -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 );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment