mirror of
https://github.com/reactos/reactos.git
synced 2024-10-03 16:05:37 +00:00
- Memtrack enhancements
- It now warns us when it detects an entry that wasn't freed by a memtrack-enabled function - It also provides some info when it detects a double free - Removed some extra tag tracking junk svn path=/trunk/; revision=41705
This commit is contained in:
parent
90f47c629c
commit
fdf20e8c9a
|
@ -38,7 +38,6 @@ VOID UntrackFL( PCHAR File, ULONG Line, PVOID Thing, ULONG Tag );
|
|||
#define Untrack(Thing) UntrackFL(__FILE__,__LINE__,Thing)
|
||||
VOID TrackDumpFL( PCHAR File, ULONG Line );
|
||||
#define TrackDump() TrackDumpFL(__FILE__,__LINE__)
|
||||
VOID TrackTag( ULONG Tag );
|
||||
|
||||
static __inline PVOID ExAllocateFromNPagedLookasideListX( PNPAGED_LOOKASIDE_LIST List, PCHAR File, ULONG Line ) {
|
||||
PVOID Out = ExAllocateFromNPagedLookasideList( List );
|
||||
|
@ -62,14 +61,12 @@ static __inline VOID ExFreePoolX( PVOID Data, PCHAR File, ULONG Line ) {
|
|||
ExFreePool( Data );
|
||||
}
|
||||
|
||||
#define MEMTRACK_MAX_TAGS_TO_TRACK 64
|
||||
#else
|
||||
#define MTMARK()
|
||||
#define Track(x,y)
|
||||
#define TrackingInit()
|
||||
#define TrackDump()
|
||||
#define Untrack(x)
|
||||
#define TrackTag(x)
|
||||
#define exAllocatePoolWithTag(x,y,z) ExAllocatePoolWithTag(x,y,z)
|
||||
#define exAllocatePool(x,y) ExAllocatePool(x,y)
|
||||
#define exFreePool(x) ExFreePool(x)
|
||||
|
|
|
@ -725,10 +725,6 @@ DriverEntry(
|
|||
TI_DbgPrint(MAX_TRACE, ("Called.\n"));
|
||||
|
||||
TrackingInit();
|
||||
TrackTag(NDIS_BUFFER_TAG);
|
||||
TrackTag(NDIS_PACKET_TAG);
|
||||
TrackTag(FBSD_MALLOC);
|
||||
TrackTag(EXALLOC_TAG);
|
||||
|
||||
/* TdiInitialize() ? */
|
||||
|
||||
|
|
|
@ -8,14 +8,6 @@
|
|||
static LIST_ENTRY AllocatedObjectsList;
|
||||
static KSPIN_LOCK AllocatedObjectsLock;
|
||||
static NPAGED_LOOKASIDE_LIST AllocatedObjectsLookasideList;
|
||||
ULONG TagsToShow[MEMTRACK_MAX_TAGS_TO_TRACK] = { 0 };
|
||||
|
||||
VOID TrackTag( ULONG Tag ) {
|
||||
UINT i;
|
||||
|
||||
for( i = 0; TagsToShow[i]; i++ );
|
||||
TagsToShow[i] = Tag;
|
||||
}
|
||||
|
||||
VOID TrackingInit() {
|
||||
TcpipInitializeSpinLock( &AllocatedObjectsLock );
|
||||
|
@ -82,9 +74,8 @@ VOID TrackWithTag( ULONG Tag, PVOID Thing, PCHAR FileName, ULONG LineNo ) {
|
|||
if( ThingInList->Thing == Thing ) {
|
||||
RemoveEntryList(Entry);
|
||||
|
||||
TI_DbgPrint(MAX_TRACE,("TRACK: SPECIFIED ALREADY ALLOCATED ITEM %x\n", Thing));
|
||||
ShowTrackedThing( "Double Alloc (Item in list)", ThingInList, FALSE );
|
||||
ShowTrackedThing( "Double Alloc (Item not in list)", TrackedThing, FALSE );
|
||||
ShowTrackedThing( "Double Alloc (Item in list)", ThingInList, TRUE );
|
||||
ShowTrackedThing( "Double Alloc (Item not in list)", TrackedThing, TRUE );
|
||||
|
||||
ExFreeToNPagedLookasideList( &AllocatedObjectsLookasideList,
|
||||
ThingInList );
|
||||
|
@ -99,14 +90,6 @@ VOID TrackWithTag( ULONG Tag, PVOID Thing, PCHAR FileName, ULONG LineNo ) {
|
|||
TcpipReleaseSpinLock( &AllocatedObjectsLock, OldIrql );
|
||||
}
|
||||
|
||||
BOOLEAN ShowTag( ULONG Tag ) {
|
||||
UINT i;
|
||||
|
||||
for( i = 0; TagsToShow[i] && TagsToShow[i] != Tag; i++ );
|
||||
|
||||
return TagsToShow[i] ? TRUE : FALSE;
|
||||
}
|
||||
|
||||
VOID UntrackFL( PCHAR File, ULONG Line, PVOID Thing, ULONG Tag ) {
|
||||
KIRQL OldIrql;
|
||||
PLIST_ENTRY Entry;
|
||||
|
@ -132,13 +115,21 @@ VOID UntrackFL( PCHAR File, ULONG Line, PVOID Thing, ULONG Tag ) {
|
|||
|
||||
TcpipReleaseSpinLock( &AllocatedObjectsLock, OldIrql );
|
||||
|
||||
/* TrackDumpFL( File, Line ); */
|
||||
return;
|
||||
}
|
||||
Entry = Entry->Flink;
|
||||
}
|
||||
TcpipReleaseSpinLock( &AllocatedObjectsLock, OldIrql );
|
||||
DbgPrint("UNTRACK: SPECIFIED ALREADY FREE ITEM %x\n", Thing);
|
||||
|
||||
DbgPrint("[Double Free] Thing %08x %c%c%c%c (%s:%d)\n",
|
||||
Thing,
|
||||
((PCHAR)&Tag)[3],
|
||||
((PCHAR)&Tag)[2],
|
||||
((PCHAR)&Tag)[1],
|
||||
((PCHAR)&Tag)[0],
|
||||
File,
|
||||
Line);
|
||||
|
||||
ASSERT( FALSE );
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue