X-Git-Url: http://git.etherboot.org/mirror/winof/.git/blobdiff_plain/f0af810d6db80e7f68a1f5efe6259d6ce16a487b..e3b9b49f0388e9186fe8f95ca2238759e644de93:/ulp/nd/user/NdProv.cpp diff --git a/ulp/nd/user/NdProv.cpp b/ulp/nd/user/NdProv.cpp index e2428773..720ef076 100644 --- a/ulp/nd/user/NdProv.cpp +++ b/ulp/nd/user/NdProv.cpp @@ -58,6 +58,9 @@ uint32_t g_nd_dbg_level = TRACE_LEVEL_ERROR; /* WPP doesn't want here literals! */ uint32_t g_nd_dbg_flags = 0x80000001; /* ND_DBG_ERROR | ND_DBG_NDI; */ +HANDLE ghHeap; + + namespace NetworkDirect { @@ -381,7 +384,7 @@ void* __cdecl operator new( size_t count ) { - return HeapAlloc( GetProcessHeap(), 0, count ); + return HeapAlloc( ghHeap, 0, count ); } @@ -389,7 +392,7 @@ void __cdecl operator delete( void* object ) { - HeapFree( GetProcessHeap(), 0, object ); + HeapFree( ghHeap, 0, object ); } extern "C" { @@ -467,11 +470,7 @@ _DllMain( #else WPP_INIT_TRACING(L"ibndprov.dll"); #endif -#endif - - -#if !defined(EVENT_TRACING) -#if DBG +#elif DBG TCHAR env_var[16]; DWORD i; @@ -493,14 +492,24 @@ _DllMain( ND_PRINT( TRACE_LEVEL_ERROR, ND_DBG_ERR , ("(pcs %#x) IbNdProv: Debug print: level:%d, flags 0x%x\n", GetCurrentProcessId(), g_nd_dbg_level ,g_nd_dbg_flags) ); - #endif + + ghHeap = HeapCreate( 0, 0, 0 ); + if( ghHeap == NULL ) + { + ND_PRINT_EXIT( + TRACE_LEVEL_ERROR, ND_DBG_NDI, ("Failed to allocate private heap.\n") ); +#if defined(EVENT_TRACING) + WPP_CLEANUP(); #endif + return FALSE; + } ND_PRINT(TRACE_LEVEL_INFORMATION, ND_DBG_NDI, ("DllMain: DLL_PROCESS_ATTACH\n") ); break; case DLL_PROCESS_DETACH: + HeapDestroy( ghHeap ); ND_PRINT(TRACE_LEVEL_INFORMATION, ND_DBG_NDI, ("DllMain: DLL_PROCESS_DETACH, ref count %d\n", NetworkDirect::gnRef) );