windows-nt/Source/XPSP1/NT/sdktools/profiler/thread.c
2020-09-26 16:20:57 +08:00

83 lines
1.4 KiB
C

#include <stdio.h>
#include <windows.h>
#include "view.h"
#include "thread.h"
#include "dump.h"
#include "except.h"
#include "memory.h"
extern BOOL g_bIsWin9X;
static CRITICAL_SECTION tCritSec;
static PTHREADFAULT pThreadHead = 0;
VOID
InitializeThreadData(VOID)
{
InitializeCriticalSection(&tCritSec);
}
PVOID
GetProfilerThreadData(VOID)
{
PVOID pData;
PTHREADFAULT pTemp = 0;
DWORD dwThreadId;
dwThreadId = GetCurrentThreadId();
EnterCriticalSection(&tCritSec);
pTemp = pThreadHead;
while(pTemp) {
if (pTemp->dwThreadId == dwThreadId) {
break;
}
pTemp = pTemp->pNext;
}
LeaveCriticalSection(&tCritSec);
return pTemp;
}
VOID
SetProfilerThreadData(PVOID pData)
{
PTHREADFAULT pTemp;
EnterCriticalSection(&tCritSec);
pTemp = (PTHREADFAULT)pData;
pTemp->dwThreadId = GetCurrentThreadId();
pTemp->pNext = pThreadHead;
pThreadHead = pTemp;
LeaveCriticalSection(&tCritSec);
}
PTHREADFAULT
AllocateProfilerThreadData(VOID)
{
PTHREADFAULT pTemp = 0;
pTemp = AllocMem(sizeof(THREADFAULT));
if (0 == pTemp) {
return 0;
}
pTemp->dwCallLevel = 0;
pTemp->dwPrevBP = 0;
pTemp->pCallStackList = 0;
pTemp->dwCallMarker = 0;
pTemp->pNext = 0;
//
// Set thread data
//
SetProfilerThreadData(pTemp);
return pTemp;
}