Commit 2c46ee18 authored by Rémi Bernon's avatar Rémi Bernon Committed by Alexandre Julliard

ntdll: Move subheap decommit hysteresis to free_used_block.

parent d0ad5d6a
...@@ -649,8 +649,7 @@ static inline BOOL HEAP_Decommit( SUBHEAP *subheap, void *ptr ) ...@@ -649,8 +649,7 @@ static inline BOOL HEAP_Decommit( SUBHEAP *subheap, void *ptr )
SIZE_T decommit_size; SIZE_T decommit_size;
SIZE_T size = (char *)ptr - (char *)subheap->base; SIZE_T size = (char *)ptr - (char *)subheap->base;
/* round to next block and add one full block */ size = ((size + COMMIT_MASK) & ~COMMIT_MASK);
size = ((size + COMMIT_MASK) & ~COMMIT_MASK) + COMMIT_MASK + 1;
size = max( size, subheap->min_commit ); size = max( size, subheap->min_commit );
if (size >= subheap->commitSize) return TRUE; if (size >= subheap->commitSize) return TRUE;
decommit_size = subheap->commitSize - size; decommit_size = subheap->commitSize - size;
...@@ -748,7 +747,11 @@ static void free_used_block( SUBHEAP *subheap, struct block *block ) ...@@ -748,7 +747,11 @@ static void free_used_block( SUBHEAP *subheap, struct block *block )
list_remove( &subheap->entry ); list_remove( &subheap->entry );
NtFreeVirtualMemory( NtCurrentProcess(), &addr, &size, MEM_RELEASE ); NtFreeVirtualMemory( NtCurrentProcess(), &addr, &size, MEM_RELEASE );
} }
else if (!heap->shared) HEAP_Decommit( subheap, entry + 1 ); else if (!heap->shared)
{
/* keep room for a full commited block as hysteresis */
HEAP_Decommit( subheap, (char *)(entry + 1) + (COMMIT_MASK + 1) );
}
} }
......
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