From d5beea60cf5645447a27d4618211c119970cbc8d Mon Sep 17 00:00:00 2001 From: wj32 Date: Sun, 13 Jun 2010 07:10:13 +0000 Subject: [PATCH] added free list support to PH_LIST and PH_HASHTABLE git-svn-id: svn://svn.code.sf.net/p/processhacker/code@3201 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- 2.x/trunk/phlib/basesup.c | 22 ++++++++++++++++------ 2.x/trunk/phlib/ref.c | 4 ++-- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/2.x/trunk/phlib/basesup.c b/2.x/trunk/phlib/basesup.c index ed783eb6c..e1ff3563d 100644 --- a/2.x/trunk/phlib/basesup.c +++ b/2.x/trunk/phlib/basesup.c @@ -103,6 +103,8 @@ static ULONG PhpPrimeNumbers[] = */ BOOLEAN PhInitializeBase() { + PH_OBJECT_TYPE_PARAMETERS parameters; + if (!NT_SUCCESS(PhCreateObjectType( &PhStringType, L"String", @@ -119,11 +121,15 @@ BOOLEAN PhInitializeBase() ))) return FALSE; - if (!NT_SUCCESS(PhCreateObjectType( + parameters.FreeListSize = sizeof(PH_LIST); + parameters.FreeListCount = 128; + + if (!NT_SUCCESS(PhCreateObjectTypeEx( &PhListType, L"List", - 0, - PhpListDeleteProcedure + PHOBJTYPE_USE_FREE_LIST, + PhpListDeleteProcedure, + ¶meters ))) return FALSE; @@ -143,11 +149,15 @@ BOOLEAN PhInitializeBase() ))) return FALSE; - if (!NT_SUCCESS(PhCreateObjectType( + parameters.FreeListSize = sizeof(PH_HASHTABLE); + parameters.FreeListCount = 64; + + if (!NT_SUCCESS(PhCreateObjectTypeEx( &PhHashtableType, L"Hashtable", - 0, - PhpHashtableDeleteProcedure + PHOBJTYPE_USE_FREE_LIST, + PhpHashtableDeleteProcedure, + ¶meters ))) return FALSE; diff --git a/2.x/trunk/phlib/ref.c b/2.x/trunk/phlib/ref.c index e616a4ab3..243cccb80 100644 --- a/2.x/trunk/phlib/ref.c +++ b/2.x/trunk/phlib/ref.c @@ -575,10 +575,10 @@ PPH_OBJECT_HEADER PhpAllocateObject( if (ObjectType->Flags & PHOBJTYPE_USE_FREE_LIST) { #ifdef PHOBJ_STRICT_CHECKS - if (ObjectType->FreeList.Size != ObjectSize) + if (ObjectType->FreeList.Size != PhpAddObjectHeaderSize(ObjectSize)) PhRaiseStatus(STATUS_INVALID_PARAMETER); #else - assert(ObjectType->FreeList.Size == ObjectSize); + assert(ObjectType->FreeList.Size == PhpAddObjectHeaderSize(ObjectSize)); #endif objectHeader = PhAllocateFromFreeList(&ObjectType->FreeList);