Commit cb2a5f7e authored by Alexandre Julliard's avatar Alexandre Julliard

ntdll: Move alloc notification closer to the allocation for large blocks.

parent b1c9ce44
...@@ -693,6 +693,7 @@ static void *allocate_large_block( HEAP *heap, DWORD flags, SIZE_T size ) ...@@ -693,6 +693,7 @@ static void *allocate_large_block( HEAP *heap, DWORD flags, SIZE_T size )
arena->size = ARENA_LARGE_SIZE; arena->size = ARENA_LARGE_SIZE;
arena->magic = ARENA_LARGE_MAGIC; arena->magic = ARENA_LARGE_MAGIC;
list_add_tail( &heap->large_list, &arena->entry ); list_add_tail( &heap->large_list, &arena->entry );
notify_alloc( arena + 1, size, flags & HEAP_ZERO_MEMORY );
return arena + 1; return arena + 1;
} }
...@@ -1518,7 +1519,6 @@ PVOID WINAPI RtlAllocateHeap( HANDLE heap, ULONG flags, SIZE_T size ) ...@@ -1518,7 +1519,6 @@ PVOID WINAPI RtlAllocateHeap( HANDLE heap, ULONG flags, SIZE_T size )
void *ret = allocate_large_block( heap, flags, size ); void *ret = allocate_large_block( heap, flags, size );
if (!(flags & HEAP_NO_SERIALIZE)) RtlLeaveCriticalSection( &heapPtr->critSection ); if (!(flags & HEAP_NO_SERIALIZE)) RtlLeaveCriticalSection( &heapPtr->critSection );
if (!ret && (flags & HEAP_GENERATE_EXCEPTIONS)) RtlRaiseStatus( STATUS_NO_MEMORY ); if (!ret && (flags & HEAP_GENERATE_EXCEPTIONS)) RtlRaiseStatus( STATUS_NO_MEMORY );
notify_alloc( ret, size, flags & HEAP_ZERO_MEMORY );
TRACE("(%p,%08x,%08lx): returning %p\n", heap, flags, size, ret ); TRACE("(%p,%08x,%08lx): returning %p\n", heap, flags, size, ret );
return ret; return ret;
} }
...@@ -1675,7 +1675,6 @@ PVOID WINAPI RtlReAllocateHeap( HANDLE heap, ULONG flags, PVOID ptr, SIZE_T size ...@@ -1675,7 +1675,6 @@ PVOID WINAPI RtlReAllocateHeap( HANDLE heap, ULONG flags, PVOID ptr, SIZE_T size
if (!find_large_block( heapPtr, ptr )) goto error; if (!find_large_block( heapPtr, ptr )) goto error;
if (!(ret = realloc_large_block( heapPtr, flags, ptr, size ))) goto oom; if (!(ret = realloc_large_block( heapPtr, flags, ptr, size ))) goto oom;
notify_free( ptr ); notify_free( ptr );
notify_alloc( ret, size, flags & HEAP_ZERO_MEMORY );
goto done; goto done;
} }
if ((char *)pArena < (char *)subheap->base + subheap->headerSize) goto error; if ((char *)pArena < (char *)subheap->base + subheap->headerSize) goto error;
...@@ -1693,7 +1692,6 @@ PVOID WINAPI RtlReAllocateHeap( HANDLE heap, ULONG flags, PVOID ptr, SIZE_T size ...@@ -1693,7 +1692,6 @@ PVOID WINAPI RtlReAllocateHeap( HANDLE heap, ULONG flags, PVOID ptr, SIZE_T size
{ {
if (flags & HEAP_REALLOC_IN_PLACE_ONLY) goto oom; if (flags & HEAP_REALLOC_IN_PLACE_ONLY) goto oom;
if (!(ret = allocate_large_block( heapPtr, flags, size ))) goto oom; if (!(ret = allocate_large_block( heapPtr, flags, size ))) goto oom;
notify_alloc( ret, size, flags & HEAP_ZERO_MEMORY );
memcpy( ret, pArena + 1, oldActualSize ); memcpy( ret, pArena + 1, oldActualSize );
notify_free( pArena + 1 ); notify_free( pArena + 1 );
HEAP_MakeInUseBlockFree( subheap, pArena ); HEAP_MakeInUseBlockFree( subheap, pArena );
......
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