From ada2d4f150af430b0cf01adcbe8b6d3e34deeeb1 Mon Sep 17 00:00:00 2001 From: Peter Oberndorfer Date: Mon, 17 Nov 2008 00:44:07 +0100 Subject: [PATCH] ntdll: Add heap_poison debug channel. --- dlls/ntdll/heap.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/dlls/ntdll/heap.c b/dlls/ntdll/heap.c index d94e1f0bed0..cdd1f70ea89 100644 --- a/dlls/ntdll/heap.c +++ b/dlls/ntdll/heap.c @@ -43,6 +43,7 @@ #include "wine/server.h" WINE_DEFAULT_DEBUG_CHANNEL(heap); +WINE_DECLARE_DEBUG_CHANNEL(heap_poison); /* Note: the heap data structures are loosely based on what Pietrek describes in his * book 'Windows 95 System Programming Secrets', with some adaptations for @@ -159,7 +160,7 @@ static BOOL HEAP_IsRealArena( HEAP *heapPtr, DWORD flags, LPCVOID block, BOOL qu /* mark a block of memory as free for debugging purposes */ static inline void mark_block_free( void *ptr, SIZE_T size ) { - if (TRACE_ON(heap) || WARN_ON(heap)) memset( ptr, ARENA_FREE_FILLER, size ); + if (TRACE_ON(heap) || WARN_ON(heap) || TRACE_ON(heap_poison)) memset( ptr, ARENA_FREE_FILLER, size ); #if defined(VALGRIND_MAKE_MEM_NOACCESS) VALGRIND_DISCARD( VALGRIND_MAKE_MEM_NOACCESS( ptr, size )); #elif defined( VALGRIND_MAKE_NOACCESS) @@ -185,7 +186,7 @@ static inline void mark_block_uninitialized( void *ptr, SIZE_T size ) #elif defined(VALGRIND_MAKE_WRITABLE) VALGRIND_DISCARD( VALGRIND_MAKE_WRITABLE( ptr, size )); #endif - if (TRACE_ON(heap) || WARN_ON(heap)) + if (TRACE_ON(heap) || WARN_ON(heap) || TRACE_ON(heap_poison)) { memset( ptr, ARENA_INUSE_FILLER, size ); #if defined(VALGRIND_MAKE_MEM_UNDEFINED) @@ -394,7 +395,7 @@ static HEAP *HEAP_GetPtr( ERR("Invalid heap %p!\n", heap ); return NULL; } - if (TRACE_ON(heap) && !HEAP_IsRealArena( heapPtr, 0, NULL, NOISY )) + if ((TRACE_ON(heap)|| TRACE_ON(heap_poison)) && !HEAP_IsRealArena( heapPtr, 0, NULL, NOISY )) { HEAP_Dump( heapPtr ); assert( FALSE ); @@ -834,6 +835,8 @@ static SUBHEAP *HEAP_CreateSubHeap( HEAP *heap, LPVOID address, DWORD flags, if (!processHeap) /* do it by hand to avoid memory allocations */ { + if(TRACE_ON(heap_poison)) + TRACE_(heap_poison)("poisioning heap\n"); heap->critSection.DebugInfo = &process_heap_critsect_debug; heap->critSection.LockCount = -1; heap->critSection.RecursionCount = 0; -- 2.11.4.GIT