You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
175 lines
3.4 KiB
175 lines
3.4 KiB
/*++
|
|
|
|
Copyright (c) 2000-2001 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
memory.c
|
|
|
|
Abstract:
|
|
|
|
DNS Resolver Service
|
|
|
|
Memory management.
|
|
|
|
Author:
|
|
|
|
James Gilroy (jamesg) March 2000
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
|
|
#include "local.h"
|
|
|
|
|
|
//
|
|
// Note: most records are created by dnsapi heap -- from
|
|
// query or hosts file routines. However, we do create
|
|
// name error caching records ourselves using dnslib routines.
|
|
//
|
|
// This means -- until we either
|
|
// - extend query or dnslib record creation interfaces to
|
|
// include heap parameter
|
|
// - explicitly free and recreate
|
|
// - tag records (dnsapi\not) somehow (flags field)
|
|
// that
|
|
// dnsapi and dnslib heaps MUST be the same.
|
|
// With dnsapi now potentially having it's own heap, this means
|
|
// dnslib should use dnsapi heap.
|
|
//
|
|
// So we'll put off using the debug heap for dnslib.
|
|
//
|
|
//
|
|
// Note the ideal solution:
|
|
// - dnsapi (query and hosts file) creates records in
|
|
// the cache heap (by passed heap handle)
|
|
// - we create our NAME_ERROR records locally in that
|
|
// heap also (our functionalize to dnsapi)
|
|
// - copy for RPC can be in separate heap used only by MIDL
|
|
// - we have a separate heap for other random crap in the process
|
|
//
|
|
|
|
|
|
//
|
|
// Counters for heap debugging
|
|
//
|
|
|
|
DWORD g_ResAllocCount = 0;
|
|
DWORD g_ResAllocMemory = 0;
|
|
DWORD g_ResFreeCount = 0;
|
|
|
|
DWORD g_MidlAllocCount = 0;
|
|
DWORD g_MidlAllocMemory = 0;
|
|
DWORD g_MidlFreeCount = 0;
|
|
|
|
|
|
|
|
|
|
//
|
|
// RPC memory routines
|
|
//
|
|
// These are called by the stub code generated by MIDL.
|
|
//
|
|
|
|
PVOID
|
|
WINAPI
|
|
MIDL_user_allocate(
|
|
IN size_t Size
|
|
)
|
|
{
|
|
DNSDBG( HEAP, (
|
|
"MIDL_user_allocate( %d )\n",
|
|
Size ));
|
|
|
|
g_MidlAllocCount++;
|
|
g_MidlAllocMemory += Size;
|
|
|
|
// return( ALLOCATE_HEAP( Size ) );
|
|
// return DnsApiAlloc( Size );
|
|
|
|
return Dns_Alloc( Size );
|
|
}
|
|
|
|
VOID
|
|
WINAPI
|
|
MIDL_user_free(
|
|
IN OUT PVOID pMem
|
|
)
|
|
{
|
|
DNSDBG( HEAP, (
|
|
"MIDL_user_free( %p )\n",
|
|
pMem ));
|
|
|
|
g_MidlFreeCount++;
|
|
|
|
// FREE_HEAP( pMem );
|
|
// DnsApiFree( pMem );
|
|
|
|
Dns_Free( pMem );
|
|
}
|
|
|
|
|
|
|
|
//
|
|
// Resolver heap routines
|
|
//
|
|
// Currently (see note above) everything RPC, record allocs
|
|
// and general allocs are in the same heap.
|
|
// However the Tag field sets us up to dispatch to different
|
|
// heaps. The file and line info allow us to later use
|
|
// debug heap routines.
|
|
//
|
|
|
|
PVOID
|
|
Res_Alloc(
|
|
IN DWORD Length,
|
|
IN DWORD Tag,
|
|
IN PSTR pszFile,
|
|
IN DWORD LineNo
|
|
)
|
|
{
|
|
DNSDBG( HEAP, (
|
|
"Res_Alloc( %d, tag=%d )\n",
|
|
Length,
|
|
Tag ));
|
|
|
|
g_ResAllocCount++;
|
|
g_ResAllocMemory += Length;
|
|
|
|
return Dns_Alloc( Length );
|
|
}
|
|
|
|
|
|
PVOID
|
|
Res_AllocZero(
|
|
IN DWORD Length,
|
|
IN DWORD Tag,
|
|
IN PSTR pszFile,
|
|
IN DWORD LineNo
|
|
)
|
|
{
|
|
return Dns_AllocZero( Length );
|
|
}
|
|
|
|
|
|
VOID
|
|
Res_Free(
|
|
IN OUT PVOID pMemory,
|
|
IN DWORD Tag
|
|
)
|
|
{
|
|
DNSDBG( HEAP, (
|
|
"Res_Free( %p, tag=%d )\n",
|
|
pMemory,
|
|
Tag ));
|
|
|
|
g_ResFreeCount++;
|
|
|
|
Dns_Free( pMemory );
|
|
}
|
|
|
|
//
|
|
// End memory.c
|
|
//
|