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