Dump HeapWalk entries
Uwe Bonnes
bon at elektron.ikp.physik.tu-darmstadt.de
Wed Mar 2 10:52:45 CST 2005
Changelog:
dlls/ntdll/heap.c:
Dump Heapwalk entries when Heap Tracing
--
Uwe Bonnes bon at elektron.ikp.physik.tu-darmstadt.de
Institut fuer Kernphysik Schlossgartenstrasse 9 64289 Darmstadt
--------- Tel. 06151 162516 -------- Fax. 06151 164321 ----------
Index: wine/dlls/ntdll/heap.c
===================================================================
RCS file: /home/wine/wine/dlls/ntdll/heap.c,v
retrieving revision 1.33
diff -u -w -r1.33 heap.c
--- wine/dlls/ntdll/heap.c 25 Feb 2005 14:07:57 -0000 1.33
+++ wine/dlls/ntdll/heap.c 2 Mar 2005 16:02:29 -0000
@@ -246,6 +246,47 @@
}
+void HEAP_DumpEntry( LPPROCESS_HEAP_ENTRY entry )
+{
+ WORD rem_flags;
+ DPRINTF( "Dumping entry %08lx\n", (DWORD)entry );
+ DPRINTF( "lpData\t\t: %08lx\n", (DWORD)entry->lpData );
+ DPRINTF( "cbData\t\t: %08lx\n", entry->cbData);
+ DPRINTF( "cbOverhead\t: %08x\n", entry->cbOverhead);
+ DPRINTF( "iRegionIndex\t: %08x\n", entry->iRegionIndex);
+ DPRINTF( "WFlags\t\t: ");
+ if (entry->wFlags & PROCESS_HEAP_REGION)
+ DPRINTF( "PROCESS_HEAP_REGION ");
+ if (entry->wFlags & PROCESS_HEAP_UNCOMMITTED_RANGE)
+ DPRINTF( "PROCESS_HEAP_UNCOMMITTED_RANGE ");
+ if (entry->wFlags & PROCESS_HEAP_ENTRY_BUSY)
+ DPRINTF( "PROCESS_HEAP_ENTRY_BUSY ");
+ if (entry->wFlags & PROCESS_HEAP_ENTRY_MOVEABLE)
+ DPRINTF( "PROCESS_HEAP_ENTRY_MOVEABLE ");
+ if (entry->wFlags & PROCESS_HEAP_ENTRY_DDESHARE)
+ DPRINTF( "PROCESS_HEAP_ENTRY_DDESHARE ");
+ rem_flags = entry->wFlags &
+ ~(PROCESS_HEAP_REGION | PROCESS_HEAP_UNCOMMITTED_RANGE |
+ PROCESS_HEAP_ENTRY_BUSY | PROCESS_HEAP_ENTRY_MOVEABLE|
+ PROCESS_HEAP_ENTRY_DDESHARE);
+ if (rem_flags)
+ DPRINTF( "Unknown %08x", rem_flags);
+ DPRINTF( "\n");
+ if ((entry->wFlags & PROCESS_HEAP_ENTRY_BUSY )
+ && (entry->wFlags & PROCESS_HEAP_ENTRY_MOVEABLE))
+ {
+ /* Treat as block */
+ DPRINTF( "BLOCK->hMem\t\t:%08lx\n", (DWORD)entry->u.Block.hMem);
+ }
+ if (entry->wFlags & PROCESS_HEAP_REGION)
+ {
+ DPRINTF( "Region.dwCommittedSize\t:%08lx\n",entry->u.Region.dwCommittedSize);
+ DPRINTF( "Region.dwUnCommittedSize\t:%08lx\n",entry->u.Region.dwUnCommittedSize);
+ DPRINTF( "Region.lpFirstBlock\t:%08lx\n",(DWORD)entry->u.Region.lpFirstBlock);
+ DPRINTF( "Region.lpLastBlock\t:%08lx\n",(DWORD)entry->u.Region.lpLastBlock);
+ }
+}
+
/***********************************************************************
* HEAP_GetPtr
* RETURNS
@@ -1579,6 +1620,13 @@
ret = STATUS_SUCCESS;
HW_end:
+ if (TRACE_ON(heap))
+ {
+ if (ret == STATUS_SUCCESS)
+ HEAP_DumpEntry(entry);
+ else
+ DPRINTF("error %08lx\n", ret);
+ }
if (!(heapPtr->flags & HEAP_NO_SERIALIZE)) RtlLeaveCriticalSection( &heapPtr->critSection );
return ret;
}
More information about the wine-patches
mailing list