8157338a0b6a95bb12936b3eac7cb760c4974b5a
[reactos.git] / reactos / drivers / network / tcpip / include / memtrack.h
1 #ifndef MEMTRACK_H
2 #define MEMTRACK_H
3
4 #include <pool.h>
5
6 #ifndef FOURCC
7 #define FOURCC(a,b,c,d) (((a)<<24)|((b)<<16)|((c)<<8)|(d))
8 #endif
9
10 #define FBSD_MALLOC FOURCC('d','s','b','f')
11 #define EXALLOC_TAG FOURCC('E','x','A','l')
12 #define IRP_TAG FOURCC('P','I','R','P')
13 #define NPLOOK_TAG FOURCC('N','P','L','A')
14
15 #define AllocatePacketWithBuffer(x,y,z) AllocatePacketWithBufferX(x,y,z,__FILE__,__LINE__)
16 #define FreeNdisPacket(x) FreeNdisPacketX(x,__FILE__,__LINE__)
17
18 #ifdef DBG
19 #define MTMARK() TrackDumpFL(__FILE__, __LINE__)
20 #define exAllocatePool(x,y) ExAllocatePoolX(x,y,__FILE__,__LINE__)
21 #define exAllocatePoolWithTag(x,y,z) ExAllocatePoolX(x,y,__FILE__,__LINE__)
22 #define exFreePool(x) ExFreePoolX(x,__FILE__,__LINE__)
23 #define exAllocateFromNPagedLookasideList(x) ExAllocateFromNPagedLookasideListX(x,__FILE__,__LINE__)
24 #define exFreeToNPagedLookasideList(x,y) ExFreeToNPagedLookasideListX(x,y,__FILE__,__LINE__)
25
26 typedef struct _ALLOCATION_TRACKER {
27 LIST_ENTRY Entry;
28 ULONG Tag;
29 PVOID Thing;
30 PCHAR FileName;
31 ULONG LineNo;
32 } ALLOCATION_TRACKER, *PALLOCATION_TRACKER;
33
34 VOID TrackingInit();
35 VOID TrackWithTag( ULONG Tag, PVOID Thing, PCHAR File, ULONG Line );
36 #define Track(Tag,Thing) TrackWithTag(Tag,Thing,__FILE__,__LINE__)
37 VOID UntrackFL( PCHAR File, ULONG Line, PVOID Thing, ULONG Tag );
38 #define Untrack(Thing) UntrackFL(__FILE__,__LINE__,Thing)
39 VOID TrackDumpFL( PCHAR File, ULONG Line );
40 #define TrackDump() TrackDumpFL(__FILE__,__LINE__)
41 VOID TrackTag( ULONG Tag );
42
43 static __inline PVOID ExAllocateFromNPagedLookasideListX( PNPAGED_LOOKASIDE_LIST List, PCHAR File, ULONG Line ) {
44 PVOID Out = ExAllocateFromNPagedLookasideList( List );
45 if( Out ) TrackWithTag( NPLOOK_TAG, Out, File, Line );
46 return Out;
47 }
48
49 static __inline VOID ExFreeToNPagedLookasideListX( PNPAGED_LOOKASIDE_LIST List, PVOID Thing, PCHAR File, ULONG Line ) {
50 UntrackFL(File, Line, Thing, NPLOOK_TAG);
51 ExFreeToNPagedLookasideList( List, Thing );
52 }
53
54 static __inline PVOID ExAllocatePoolX( POOL_TYPE type, SIZE_T size, PCHAR File, ULONG Line ) {
55 PVOID Out = ExAllocatePool( type, size );
56 if( Out ) TrackWithTag( EXALLOC_TAG, Out, File, Line );
57 return Out;
58 }
59
60 static __inline VOID ExFreePoolX( PVOID Data, PCHAR File, ULONG Line ) {
61 UntrackFL(File, Line, Data, EXALLOC_TAG);
62 ExFreePool( Data );
63 }
64
65 #define MEMTRACK_MAX_TAGS_TO_TRACK 64
66 #else
67 #define MTMARK()
68 #define Track(x,y)
69 #define TrackingInit()
70 #define TrackDump()
71 #define Untrack(x)
72 #define TrackTag(x)
73 #define exAllocatePoolWithTag(x,y,z) ExAllocatePoolWithTag(x,y,z)
74 #define exAllocatePool(x,y) ExAllocatePool(x,y)
75 #define exFreePool(x) ExFreePool(x)
76 #define exAllocateFromNPagedLookasideList(x) ExAllocateFromNPagedLookasideList(x)
77 #define exFreeToNPagedLookasideList(x,y) ExFreeToNPagedLookasideList(x,y)
78 #define TrackWithTag(w,x,y,z)
79 #define UntrackFL(w,x,y,z)
80 #endif
81
82 #endif/*MEMMTRAC_H*/