41 lines
881 B
C++
41 lines
881 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
|