[PATCH 08/24] ntdll: HACK to prevent valgrind --free-fill error
Maarten Lankhorst
m.b.lankhorst at gmail.com
Thu Nov 25 17:03:40 CST 2010
---
dlls/ntdll/heap.c | 7 ++++---
1 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/dlls/ntdll/heap.c b/dlls/ntdll/heap.c
index df94410..933d998 100644
--- a/dlls/ntdll/heap.c
+++ b/dlls/ntdll/heap.c
@@ -747,7 +747,7 @@ static void *realloc_large_block( HEAP *heap, DWORD flags, void *ptr, SIZE_T siz
ARENA_LARGE *arena = (ARENA_LARGE *)ptr - 1;
void *new_ptr;
- if (arena->block_size - sizeof(*arena) >= size)
+ if (arena->block_size - sizeof(*arena) >= size && !RUNNING_ON_VALGRIND)
{
SIZE_T unused = arena->block_size - sizeof(*arena) - size;
@@ -1820,7 +1820,7 @@ PVOID WINAPI RtlReAllocateHeap( HANDLE heap, ULONG flags, PVOID ptr, SIZE_T size
oldBlockSize = (pArena->size & ARENA_SIZE_MASK);
oldActualSize = (pArena->size & ARENA_SIZE_MASK) - pArena->unused_bytes;
- if (rounded_size > oldBlockSize)
+ if (rounded_size > oldBlockSize || RUNNING_ON_VALGRIND)
{
char *pNext = (char *)(pArena + 1) + oldBlockSize;
@@ -1835,7 +1835,8 @@ PVOID WINAPI RtlReAllocateHeap( HANDLE heap, ULONG flags, PVOID ptr, SIZE_T size
}
if ((pNext < (char *)subheap->base + subheap->size) &&
(*(DWORD *)pNext & ARENA_FLAG_FREE) &&
- (oldBlockSize + (*(DWORD *)pNext & ARENA_SIZE_MASK) + sizeof(ARENA_FREE) >= rounded_size))
+ (oldBlockSize + (*(DWORD *)pNext & ARENA_SIZE_MASK) + sizeof(ARENA_FREE) >= rounded_size) &&
+ !RUNNING_ON_VALGRIND)
{
/* The next block is free and large enough */
ARENA_FREE *pFree = (ARENA_FREE *)pNext;
--
1.7.2.3
--------------090005010502010007050908--
More information about the wine-devel
mailing list