WindowsXP-SP1/shell/lib/crst.cpp

41 lines
921 B
C++

#include "stock.h"
#pragma hdrstop
#include "dbutil.h"
///////
// Critical section helper stuff
//
#ifdef DEBUG
UINT g_CriticalSectionCount = 0;
DWORD g_CriticalSectionOwner = 0;
#ifdef STACKBACKTRACE
DBstkback g_CriticalSectionLastCall[4] = { 0 };
#endif
void Dll_EnterCriticalSection(CRITICAL_SECTION * pcsDll)
{
#ifdef STACKBACKTRACE
int var0; // *must* be 1st on frame
#endif
EnterCriticalSection(pcsDll);
if (g_CriticalSectionCount++ == 0)
{
g_CriticalSectionOwner = GetCurrentThreadId();
#ifdef STACKBACKTRACE
int fp = (int) (1 + (int *)&var0);
DBGetStackBack(&fp, g_CriticalSectionLastCall, ARRAYSIZE(g_CriticalSectionLastCall));
#endif
}
}
void Dll_LeaveCriticalSection(CRITICAL_SECTION * pcsDll)
{
if (--g_CriticalSectionCount == 0)
g_CriticalSectionOwner = 0;
LeaveCriticalSection(pcsDll);
}
#endif