https://git.reactos.org/?p=reactos.git;a=commitdiff;h=6d697561f0ae70875858c…
commit 6d697561f0ae70875858c808f14c20ab2602f6d5
Author: Jérôme Gardou <jerome.gardou(a)reactos.org>
AuthorDate: Thu Jan 28 18:42:59 2021 +0100
Commit: Jérôme Gardou <jerome.gardou(a)reactos.org>
CommitDate: Fri Jan 29 09:42:13 2021 +0100
[RTL] Fix heap usage flags
- Use Heap->ForceFlags where needed
- Use passed-in flags instead of the heap flags in some places
- Do not recursively acquire the heap lock
---
sdk/lib/rtl/heap.c | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)
diff --git a/sdk/lib/rtl/heap.c b/sdk/lib/rtl/heap.c
index a75c18f5d2a..2eba86e046e 100644
--- a/sdk/lib/rtl/heap.c
+++ b/sdk/lib/rtl/heap.c
@@ -2681,7 +2681,8 @@ RtlReAllocateHeap(HANDLE HeapPtr,
{
RtlEnterHeapLock(Heap->LockVariable, TRUE);
HeapLocked = TRUE;
- Flags &= ~HEAP_NO_SERIALIZE;
+ /* Do not acquire the lock anymore for re-entrant call */
+ Flags |= HEAP_NO_SERIALIZE;
}
/* Get the pointer to the in-use entry */
@@ -3656,7 +3657,7 @@ BOOLEAN NTAPI RtlValidateHeap(
}
/* Force flags */
- Flags = Heap->ForceFlags;
+ Flags |= Heap->ForceFlags;
/* Acquire the lock if necessary */
if (!(Flags & HEAP_NO_SERIALIZE))
@@ -3744,7 +3745,7 @@ RtlSetUserValueHeap(IN PVOID HeapHandle,
BOOLEAN HeapLocked = FALSE, ValueSet = FALSE;
/* Force flags */
- Flags |= Heap->Flags;
+ Flags |= Heap->ForceFlags;
/* Call special heap */
if (RtlpHeapIsSpecial(Flags))
@@ -3806,14 +3807,14 @@ RtlSetUserFlagsHeap(IN PVOID HeapHandle,
BOOLEAN HeapLocked = FALSE;
/* Force flags */
- Flags |= Heap->Flags;
+ Flags |= Heap->ForceFlags;
/* Call special heap */
if (RtlpHeapIsSpecial(Flags))
return RtlDebugSetUserFlagsHeap(Heap, Flags, BaseAddress, UserFlagsReset,
UserFlagsSet);
/* Lock if it's lockable */
- if (!(Heap->Flags & HEAP_NO_SERIALIZE))
+ if (!(Flags & HEAP_NO_SERIALIZE))
{
RtlEnterHeapLock(Heap->LockVariable, TRUE);
HeapLocked = TRUE;
@@ -3862,14 +3863,14 @@ RtlGetUserInfoHeap(IN PVOID HeapHandle,
BOOLEAN HeapLocked = FALSE;
/* Force flags */
- Flags |= Heap->Flags;
+ Flags |= Heap->ForceFlags;
/* Call special heap */
if (RtlpHeapIsSpecial(Flags))
return RtlDebugGetUserInfoHeap(Heap, Flags, BaseAddress, UserValue, UserFlags);
/* Lock if it's lockable */
- if (!(Heap->Flags & HEAP_NO_SERIALIZE))
+ if (!(Flags & HEAP_NO_SERIALIZE))
{
RtlEnterHeapLock(Heap->LockVariable, TRUE);
HeapLocked = TRUE;