From e6400c3f8b955f15e39812d1a763d4b632740bb0 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Wed, 29 Apr 2009 09:48:31 +0000 Subject: [PATCH] - Debug pool allocator: Add support for paged pool debugging. svn path=/trunk/; revision=40727 --- reactos/ntoskrnl/include/internal/mm.h | 2 +- reactos/ntoskrnl/mm/dbgpool.c | 7 +++++-- reactos/ntoskrnl/mm/pool.c | 16 +++++++++++++--- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/reactos/ntoskrnl/include/internal/mm.h b/reactos/ntoskrnl/include/internal/mm.h index a3a041bcceb..cc74b2fd7ed 100644 --- a/reactos/ntoskrnl/include/internal/mm.h +++ b/reactos/ntoskrnl/include/internal/mm.h @@ -574,7 +574,7 @@ ExpAllocateDebugPool( VOID NTAPI -ExpFreeDebugPool(PVOID Block); +ExpFreeDebugPool(PVOID Block, BOOLEAN PagedPool); VOID NTAPI diff --git a/reactos/ntoskrnl/mm/dbgpool.c b/reactos/ntoskrnl/mm/dbgpool.c index 8e11d900948..7eda0c56cdd 100644 --- a/reactos/ntoskrnl/mm/dbgpool.c +++ b/reactos/ntoskrnl/mm/dbgpool.c @@ -91,7 +91,7 @@ ExpAllocateDebugPool(POOL_TYPE Type, ULONG Size, ULONG Tag, PVOID Caller, BOOLEA VOID NTAPI -ExpFreeDebugPool(PVOID Block) +ExpFreeDebugPool(PVOID Block, BOOLEAN PagedPool) { PEI_WHOLE_PAGE_HEADER Header; PVOID ProtectedPage; @@ -111,7 +111,10 @@ ExpFreeDebugPool(PVOID Block) MmSetPageProtect(NULL, ProtectedPage, PAGE_READWRITE); /* Free storage */ - ExFreeNonPagedPool(Header->ActualAddress); + if (PagedPool) + ExFreePagedPool(Header->ActualAddress); + else + ExFreeNonPagedPool(Header->ActualAddress); } /* EOF */ diff --git a/reactos/ntoskrnl/mm/pool.c b/reactos/ntoskrnl/mm/pool.c index a789ab7c813..fd034adf9c7 100644 --- a/reactos/ntoskrnl/mm/pool.c +++ b/reactos/ntoskrnl/mm/pool.c @@ -58,7 +58,12 @@ EiAllocatePool(POOL_TYPE PoolType, { if (KeGetCurrentIrql() > APC_LEVEL) KeBugCheckEx(BAD_POOL_CALLER, 0x08, KeGetCurrentIrql(), PoolType, Tag); - Block = ExAllocatePagedPoolWithTag(PoolType, NumberOfBytes, Tag); +#ifdef DEBUG_PPOOL + if (ExpIsPoolTagDebuggable(Tag)) + Block = ExpAllocateDebugPool(PoolType, NumberOfBytes, Tag, Caller, TRUE); + else +#endif + Block = ExAllocatePagedPoolWithTag(PoolType, NumberOfBytes, Tag); } else { @@ -277,7 +282,12 @@ ExFreePoolWithTag( (ULONG_PTR)Block); /* Free from paged pool */ - ExFreePagedPool(Block); +#ifdef DEBUG_PPOOL + if (ExpIsPoolTagDebuggable(Tag)) + ExpFreeDebugPool(Block, TRUE); + else +#endif + ExFreePagedPool(Block); } /* Check for non-paged pool */ @@ -303,7 +313,7 @@ ExFreePoolWithTag( /* Free from non-paged pool */ #ifdef DEBUG_NPOOL if (ExpIsPoolTagDebuggable(Tag)) - ExpFreeDebugPool(Block); + ExpFreeDebugPool(Block, FALSE); else #endif ExFreeNonPagedPool(Block);