mirror of
git://source.winehq.org/git/wine.git
synced 2024-09-02 13:13:39 +00:00
ntdll: Better match Windows subheap sizes.
This commit is contained in:
parent
76fc73f311
commit
354a8bb1f4
|
@ -578,7 +578,6 @@ static void test_HeapCreate(void)
|
|||
todo_wine
|
||||
ok( entries[0].Region.dwCommittedSize == 0x400 * sizeof(void *),
|
||||
"got Region.dwCommittedSize %#lx\n", entries[0].Region.dwCommittedSize );
|
||||
todo_wine
|
||||
ok( entries[0].Region.dwUnCommittedSize == 0x10000 - entries[0].Region.dwCommittedSize ||
|
||||
entries[0].Region.dwUnCommittedSize == 0x10000 * sizeof(void *) - entries[0].Region.dwCommittedSize /* win7 */,
|
||||
"got Region.dwUnCommittedSize %#lx\n", entries[0].Region.dwUnCommittedSize );
|
||||
|
@ -3019,9 +3018,9 @@ static void test_block_layout( HANDLE heap, DWORD global_flags, DWORD heap_flags
|
|||
expect_size = max( alloc_size, 2 * sizeof(void *) );
|
||||
expect_size = ALIGN_BLOCK_SIZE( expect_size + extra_size );
|
||||
diff = min( llabs( ptr2 - ptr1 ), llabs( ptr1 - ptr0 ) );
|
||||
todo_wine_if( (!(global_flags & ~FLG_HEAP_ENABLE_FREE_CHECK) && alloc_size < 2 * sizeof(void *)) )
|
||||
todo_wine_if( (!global_flags && alloc_size < 2 * sizeof(void *)) ||
|
||||
((heap_flags & HEAP_FREE_CHECKING_ENABLED) && diff >= 0x100000) )
|
||||
ok( diff == expect_size, "got diff %#Ix exp %#Ix\n", diff, expect_size );
|
||||
|
||||
ok( !memcmp( ptr0 + alloc_size, tail_buf, tail_size ), "missing block tail\n" );
|
||||
ok( !memcmp( ptr1 + alloc_size, tail_buf, tail_size ), "missing block tail\n" );
|
||||
ok( !memcmp( ptr2 + alloc_size, tail_buf, tail_size ), "missing block tail\n" );
|
||||
|
@ -3661,7 +3660,6 @@ static void test_heap_size( SIZE_T initial_size )
|
|||
heap = HeapCreate( HEAP_NO_SERIALIZE, initial_size, 0 );
|
||||
get_valloc_info( heap, ¤t_base, &alloc_size );
|
||||
|
||||
todo_wine
|
||||
ok( alloc_size == initial_size + default_heap_size || broken( (initial_size && alloc_size == initial_size)
|
||||
|| (!initial_size && (alloc_size == default_heap_size * sizeof(void*))) ) /* Win7 */,
|
||||
"got %#Ix.\n", alloc_size );
|
||||
|
@ -3687,11 +3685,9 @@ static void test_heap_size( SIZE_T initial_size )
|
|||
max_size_reached = TRUE;
|
||||
}
|
||||
}
|
||||
todo_wine_if( !initial_subheap )
|
||||
ok( alloc_size == current_subheap_size, "got %#Ix.\n", alloc_size );
|
||||
winetest_pop_context();
|
||||
}
|
||||
todo_wine_if( sizeof(void *) == 8 )
|
||||
ok( max_size_reached, "Did not reach maximum subheap size.\n" );
|
||||
|
||||
HeapDestroy( heap );
|
||||
|
|
|
@ -311,7 +311,12 @@ C_ASSERT( offsetof(struct heap, subheap) <= REGION_ALIGN - 1 );
|
|||
|
||||
#define HEAP_MAGIC ((DWORD)('H' | ('E'<<8) | ('A'<<16) | ('P'<<24)))
|
||||
|
||||
#define HEAP_DEF_SIZE (0x40000 * BLOCK_ALIGN)
|
||||
#define HEAP_INITIAL_SIZE 0x10000
|
||||
#define HEAP_INITIAL_GROW_SIZE 0x100000
|
||||
#define HEAP_MAX_GROW_SIZE 0xfd0000
|
||||
|
||||
C_ASSERT( HEAP_MIN_LARGE_BLOCK_SIZE <= HEAP_INITIAL_GROW_SIZE );
|
||||
|
||||
#define MAX_FREE_PENDING 1024 /* max number of free requests to delay */
|
||||
|
||||
/* some undocumented flags (names are made up) */
|
||||
|
@ -1133,7 +1138,7 @@ static struct block *find_free_block( struct heap *heap, ULONG flags, SIZE_T blo
|
|||
|
||||
if ((subheap = create_subheap( heap, flags, max( heap->grow_size, total_size ), total_size )))
|
||||
{
|
||||
if (heap->grow_size <= HEAP_MAX_FREE_BLOCK_SIZE / 2) heap->grow_size *= 2;
|
||||
heap->grow_size = min( heap->grow_size * 2, HEAP_MAX_GROW_SIZE );
|
||||
}
|
||||
else while (!subheap) /* shrink the grow size again if we are running out of space */
|
||||
{
|
||||
|
@ -1517,7 +1522,7 @@ HANDLE WINAPI RtlCreateHeap( ULONG flags, void *addr, SIZE_T total_size, SIZE_T
|
|||
flags &= ~(HEAP_TAIL_CHECKING_ENABLED|HEAP_FREE_CHECKING_ENABLED);
|
||||
if (process_heap) flags |= HEAP_PRIVATE;
|
||||
if (!process_heap || !total_size || (flags & HEAP_SHARED)) flags |= HEAP_GROWABLE;
|
||||
if (!total_size) total_size = HEAP_DEF_SIZE;
|
||||
if (!total_size) total_size = commit_size + HEAP_INITIAL_SIZE;
|
||||
|
||||
if (!(heap = addr))
|
||||
{
|
||||
|
@ -1532,7 +1537,7 @@ HANDLE WINAPI RtlCreateHeap( ULONG flags, void *addr, SIZE_T total_size, SIZE_T
|
|||
heap->flags = (flags & ~HEAP_SHARED);
|
||||
heap->compat_info = HEAP_STD;
|
||||
heap->magic = HEAP_MAGIC;
|
||||
heap->grow_size = max( HEAP_DEF_SIZE, total_size );
|
||||
heap->grow_size = HEAP_INITIAL_GROW_SIZE;
|
||||
heap->min_size = commit_size;
|
||||
list_init( &heap->subheap_list );
|
||||
list_init( &heap->large_list );
|
||||
|
|
Loading…
Reference in a new issue