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.
This commit is contained in:
parent
f974c8598e
commit
dc4d05690e
|
@ -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,33 +201,14 @@ 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;
|
||||
wine_mmap_add_reserved_area( addr, 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;
|
||||
}
|
||||
}
|
||||
else munmap( ptr, size );
|
||||
}
|
||||
if (size > granularity_mask + 1)
|
||||
|
@ -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 );
|
||||
|
|
Loading…
Reference in New Issue