mirror of https://github.com/tongzx/nt5src
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.
158 lines
2.6 KiB
158 lines
2.6 KiB
/*++
|
|
|
|
Copyright (c) 1998-1999 Microsoft Corporation
|
|
All rights reserved.
|
|
|
|
Module Name:
|
|
|
|
dbginit.cxx
|
|
|
|
Abstract:
|
|
|
|
Debug Library initialization
|
|
|
|
Author:
|
|
|
|
Steve Kiraly (SteveKi) 24-May-1998
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
#include "precomp.hxx"
|
|
#pragma hdrstop
|
|
|
|
//
|
|
// Debug library lock variable.
|
|
//
|
|
namespace
|
|
{
|
|
LONG DebugLibraryInitLock = 0;
|
|
BOOL IsLibraryInitialized = FALSE;
|
|
}
|
|
|
|
/*++
|
|
|
|
Title:
|
|
|
|
DebugLibraryInitialize
|
|
|
|
Routine Description:
|
|
|
|
Initialize the debug library. Basically we need to have the
|
|
library critical section initialized to prevent multiple threads
|
|
from trying to access either the messaging initialization code
|
|
or the internal heap initialization code.
|
|
|
|
Arguments:
|
|
|
|
None.
|
|
|
|
Return Value:
|
|
|
|
None.
|
|
|
|
--*/
|
|
extern "C"
|
|
VOID
|
|
DebugLibraryInitialize(
|
|
VOID
|
|
)
|
|
{
|
|
//
|
|
// Is the library initialized.
|
|
//
|
|
if (!IsLibraryInitialized)
|
|
{
|
|
//
|
|
// Only allow one thread to do the library initialization.
|
|
//
|
|
while (InterlockedCompareExchange(&DebugLibraryInitLock, 1, 0))
|
|
{
|
|
Sleep(1);
|
|
}
|
|
|
|
//
|
|
// We must re-check is, to prevent second thread from doing
|
|
// the initialization as well.
|
|
//
|
|
if (!IsLibraryInitialized)
|
|
{
|
|
//
|
|
// Initialize the ciritical section
|
|
//
|
|
GlobalCriticalSection.Initialize();
|
|
|
|
//
|
|
// Initalize the debug heap.
|
|
//
|
|
DebugLibraryInitializeHeap();
|
|
|
|
//
|
|
// Mark the library as initialized.
|
|
//
|
|
IsLibraryInitialized = TRUE;
|
|
}
|
|
|
|
//
|
|
// Release the library init lock.
|
|
//
|
|
DebugLibraryInitLock = 0;
|
|
}
|
|
}
|
|
|
|
/*++
|
|
|
|
Title:
|
|
|
|
DebugLibraryRelease
|
|
|
|
Routine Description:
|
|
|
|
Release any resorces in the debug library. Callers should call
|
|
this function to properly shut down the library. Callers should
|
|
not call any function in the library after this call.
|
|
|
|
Arguments:
|
|
|
|
None.
|
|
|
|
Return Value:
|
|
|
|
None.
|
|
|
|
--*/
|
|
extern "C"
|
|
VOID
|
|
DebugLibraryRelease(
|
|
VOID
|
|
)
|
|
{
|
|
//
|
|
// Relese the message instance.
|
|
//
|
|
TDebugMsg_Release();
|
|
|
|
//
|
|
// Walk the internal heap, if the Display library
|
|
// errors flag is enabled then the heap contents
|
|
// are dummped to the debug device.
|
|
//
|
|
DebugLibraryWalkHeap();
|
|
|
|
//
|
|
// Release the internal heap.
|
|
//
|
|
DebugLibraryDestroyHeap();
|
|
|
|
//
|
|
// Release the critical section.
|
|
//
|
|
GlobalCriticalSection.Release();
|
|
|
|
//
|
|
// Mark the library as not initialized.
|
|
//
|
|
IsLibraryInitialized = FALSE;
|
|
}
|
|
|
|
|