>From 344c2234deb65b514bf9f10b5e894bde7c49976c Mon Sep 17 00:00:00 2001 From: Maarten Lankhorst Date: Fri, 26 Nov 2010 00:03:40 +0100 Subject: [PATCH 08/24] ntdll: HACK to prevent valgrind --free-fill error --- 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