libwine: Reserve some malloc space on Solaris before we start mapping other things.

This commit is contained in:
Alexandre Julliard 2008-09-03 17:22:13 +02:00
parent 5e1ac66b25
commit c614a2481a
1 changed files with 25 additions and 0 deletions

View File

@ -286,7 +286,30 @@ static void reserve_area( void *addr, void *end )
}
#endif
}
/***********************************************************************
* reserve_malloc_space
*
* Solaris malloc is not smart enough to obtain space through mmap(), so try to make
* sure that there is some available sbrk() space before we reserve other things.
*/
static void reserve_malloc_space( size_t size )
{
#ifdef __sun
size_t i, count = size / 1024;
void **ptrs = malloc( count * sizeof(ptrs[0]) );
if (!ptrs) return;
for (i = 0; i < count; i++) if (!(ptrs[i] = malloc( 1024 ))) break;
if (i--) /* free everything except the last one */
while (i) free( ptrs[--i] );
free( ptrs );
#endif
}
#endif /* __i386__ */
/***********************************************************************
@ -325,6 +348,8 @@ void mmap_init(void)
char * const stack_ptr = &stack;
char *user_space_limit = (char *)0x7ffe0000;
reserve_malloc_space( 8 * 1024 * 1024 );
/* check for a reserved area starting at the user space limit */
/* to avoid wasting time trying to allocate it again */
LIST_FOR_EACH( ptr, &reserved_areas )