removed PH_MUTEX

git-svn-id: svn://svn.code.sf.net/p/processhacker/code@3516 21ef857c-d57f-4fe0-8362-d861dc6d29cd
This commit is contained in:
wj32
2010-08-21 02:32:51 +00:00
parent 2ae23efc28
commit 31c028e16d
9 changed files with 101 additions and 178 deletions
-4
View File
@@ -107,10 +107,6 @@ small size and good performance. Although the queued lock
is a reader-writer lock, it can be used as a mutex simply by using
the exclusive acquire/release functions.
For mutexes with blocking expected, the PH_MUTEX is an alternative.
Currently the PH_MUTEX is the same as PH_QUEUED_LOCK, although it was
RTL_CRITICAL_SECTION originally.
Events can be used through PH_EVENT. This object does not create a
kernel event object until needed, and testing its state is very
fast.
+19 -19
View File
@@ -38,7 +38,7 @@ static PPH_SYMBOL_PROVIDER DebugConsoleSymbolProvider;
static PPH_HASHTABLE ObjectListSnapshot = NULL;
#ifdef DEBUG
static PPH_LIST NewObjectList = NULL;
static PH_MUTEX NewObjectListLock;
static PH_QUEUED_LOCK NewObjectListLock;
#endif
VOID PhShowDebugConsole()
@@ -259,7 +259,7 @@ static VOID PhpDebugCreateObjectHook(
__in PPH_OBJECT_TYPE ObjectType
)
{
PhAcquireMutex(&NewObjectListLock);
PhAcquireQueuedLockExclusive(&NewObjectListLock);
if (NewObjectList)
{
@@ -267,7 +267,7 @@ static VOID PhpDebugCreateObjectHook(
PhAddItemList(NewObjectList, Object);
}
PhReleaseMutex(&NewObjectListLock);
PhReleaseQueuedLockExclusive(&NewObjectListLock);
}
#endif
@@ -499,7 +499,7 @@ NTSTATUS PhpDebugConsoleThreadStart(
0, PhpLoadCurrentProcessSymbolsCallback, DebugConsoleSymbolProvider);
#ifdef DEBUG
PhInitializeMutex(&NewObjectListLock);
PhInitializeQueuedLock(&NewObjectListLock);
PhDbgCreateObjectHook = PhpDebugCreateObjectHook;
#endif
@@ -553,7 +553,7 @@ NTSTATUS PhpDebugConsoleThreadStart(
STOPWATCH stopwatch;
ULONG i;
PPH_STRING testString;
PH_MUTEX testMutex;
RTL_CRITICAL_SECTION testCriticalSection;
PH_FAST_LOCK testFastLock;
PH_QUEUED_LOCK testQueuedLock;
@@ -575,21 +575,21 @@ NTSTATUS PhpDebugConsoleThreadStart(
wprintf(L"Referencing: %ums\n", PhGetMillisecondsStopwatch(&stopwatch));
// Mutex
// Critical section
PhInitializeMutex(&testMutex);
PhAcquireMutex(&testMutex);
PhReleaseMutex(&testMutex);
RtlInitializeCriticalSection(&testCriticalSection);
RtlEnterCriticalSection(&testCriticalSection);
RtlLeaveCriticalSection(&testCriticalSection);
PhStartStopwatch(&stopwatch);
for (i = 0; i < 10000000; i++)
{
PhAcquireMutex(&testMutex);
PhReleaseMutex(&testMutex);
RtlEnterCriticalSection(&testCriticalSection);
RtlLeaveCriticalSection(&testCriticalSection);
}
PhStopStopwatch(&stopwatch);
PhDeleteMutex(&testMutex);
RtlDeleteCriticalSection(&testCriticalSection);
wprintf(L"Mutex: %ums\n", PhGetMillisecondsStopwatch(&stopwatch));
@@ -890,9 +890,9 @@ NTSTATUS PhpDebugConsoleThreadStart(
else if (WSTR_IEQUAL(command, L"objmknew"))
{
#ifdef DEBUG
PhAcquireMutex(&NewObjectListLock);
PhAcquireQueuedLockExclusive(&NewObjectListLock);
PhpDeleteNewObjectList();
PhReleaseMutex(&NewObjectListLock);
PhReleaseQueuedLockExclusive(&NewObjectListLock);
// Creation needs to be done outside of the lock,
// otherwise a deadlock will occur.
@@ -904,9 +904,9 @@ NTSTATUS PhpDebugConsoleThreadStart(
else if (WSTR_IEQUAL(command, L"objdelnew"))
{
#ifdef DEBUG
PhAcquireMutex(&NewObjectListLock);
PhAcquireQueuedLockExclusive(&NewObjectListLock);
PhpDeleteNewObjectList();
PhReleaseMutex(&NewObjectListLock);
PhReleaseQueuedLockExclusive(&NewObjectListLock);
#else
wprintf(commandDebugOnly);
#endif
@@ -916,12 +916,12 @@ NTSTATUS PhpDebugConsoleThreadStart(
#ifdef DEBUG
ULONG i;
PhAcquireMutex(&NewObjectListLock);
PhAcquireQueuedLockExclusive(&NewObjectListLock);
if (!NewObjectList)
{
wprintf(L"Object creation hooking not active.\n");
PhReleaseMutex(&NewObjectListLock);
PhReleaseQueuedLockExclusive(&NewObjectListLock);
goto EndCommand;
}
@@ -930,7 +930,7 @@ NTSTATUS PhpDebugConsoleThreadStart(
PhpPrintObjectInfo(PhObjectToObjectHeader(NewObjectList->Items[i]), 1);
}
PhReleaseMutex(&NewObjectListLock);
PhReleaseQueuedLockExclusive(&NewObjectListLock);
#else
wprintf(commandDebugOnly);
#endif
+7 -9
View File
@@ -67,7 +67,7 @@ static BOOLEAN SearchStop;
static PPH_STRING SearchString;
static PPH_LIST SearchResults = NULL;
static ULONG SearchResultsAddIndex;
static PH_MUTEX SearchResultsLock;
static PH_QUEUED_LOCK SearchResultsLock = PH_QUEUED_LOCK_INIT;
static ULONG64 SearchPointer;
static BOOLEAN UseSearchPointer;
@@ -242,7 +242,6 @@ static INT_PTR CALLBACK PhpFindObjectsDlgProc(
SearchString = PhGetWindowText(GetDlgItem(hwndDlg, IDC_FILTER));
SearchResults = PhCreateList(128);
SearchResultsAddIndex = 0;
PhInitializeMutex(&SearchResultsLock);
SearchThreadHandle = PhCreateThread(0, PhpFindObjectsThreadStart, NULL);
@@ -481,7 +480,7 @@ static INT_PTR CALLBACK PhpFindObjectsDlgProc(
ExtendedListView_SetRedraw(lvHandle, FALSE);
PhAcquireMutex(&SearchResultsLock);
PhAcquireQueuedLockExclusive(&SearchResultsLock);
for (i = SearchResultsAddIndex; i < SearchResults->Count; i++)
{
@@ -505,7 +504,7 @@ static INT_PTR CALLBACK PhpFindObjectsDlgProc(
SearchResultsAddIndex = i;
PhReleaseMutex(&SearchResultsLock);
PhReleaseQueuedLockExclusive(&SearchResultsLock);
ExtendedListView_SetRedraw(lvHandle, TRUE);
}
@@ -516,7 +515,6 @@ static INT_PTR CALLBACK PhpFindObjectsDlgProc(
SendMessage(hwndDlg, WM_PH_SEARCH_UPDATE, 0, 0);
PhDereferenceObject(SearchString);
PhDeleteMutex(&SearchResultsLock);
NtWaitForSingleObject(SearchThreadHandle, FALSE, NULL);
NtClose(SearchThreadHandle);
@@ -563,7 +561,7 @@ static BOOLEAN NTAPI EnumModulesCallback(
PhPrintPointer(searchResult->HandleString, Module->BaseAddress);
memset(&searchResult->Info, 0, sizeof(SYSTEM_HANDLE_TABLE_ENTRY_INFO_EX));
PhAcquireMutex(&SearchResultsLock);
PhAcquireQueuedLockExclusive(&SearchResultsLock);
PhAddItemList(SearchResults, searchResult);
@@ -571,7 +569,7 @@ static BOOLEAN NTAPI EnumModulesCallback(
if (SearchResults->Count % 40 == 0)
PostMessage(PhFindObjectsWindowHandle, WM_PH_SEARCH_UPDATE, 0, 0);
PhReleaseMutex(&SearchResultsLock);
PhReleaseQueuedLockExclusive(&SearchResultsLock);
}
PhDereferenceObject(lowerFileName);
@@ -677,7 +675,7 @@ static NTSTATUS PhpFindObjectsThreadStart(
PhPrintPointer(searchResult->HandleString, (PVOID)searchResult->Handle);
searchResult->Info = *handleInfo;
PhAcquireMutex(&SearchResultsLock);
PhAcquireQueuedLockExclusive(&SearchResultsLock);
PhAddItemList(SearchResults, searchResult);
@@ -685,7 +683,7 @@ static NTSTATUS PhpFindObjectsThreadStart(
if (SearchResults->Count % 40 == 0)
PostMessage(PhFindObjectsWindowHandle, WM_PH_SEARCH_UPDATE, 0, 0);
PhReleaseMutex(&SearchResultsLock);
PhReleaseQueuedLockExclusive(&SearchResultsLock);
}
else
{
+1 -2
View File
@@ -26,7 +26,7 @@
#include <settingsp.h>
PPH_HASHTABLE PhSettingsHashtable;
PH_QUEUED_LOCK PhSettingsLock;
PH_QUEUED_LOCK PhSettingsLock = PH_QUEUED_LOCK_INIT;
PPH_LIST PhIgnoredSettings;
@@ -38,7 +38,6 @@ VOID PhSettingsInitialization()
PhpSettingsHashtableHashFunction,
128
);
PhInitializeQueuedLock(&PhSettingsLock);
PhIgnoredSettings = PhCreateList(4);
PhpAddIntegerSetting(L"AllowOnlyOneInstance", L"0");
+1 -2
View File
@@ -50,7 +50,7 @@ VOID PhpRemoveProcessItemService(
PPH_OBJECT_TYPE PhServiceItemType;
PPH_HASHTABLE PhServiceHashtable;
PH_QUEUED_LOCK PhServiceHashtableLock;
PH_QUEUED_LOCK PhServiceHashtableLock = PH_QUEUED_LOCK_INIT;
PHAPPAPI PH_CALLBACK PhServiceAddedEvent;
PHAPPAPI PH_CALLBACK PhServiceModifiedEvent;
@@ -73,7 +73,6 @@ BOOLEAN PhServiceProviderInitialization()
PhpServiceHashtableHashFunction,
40
);
PhInitializeQueuedLock(&PhServiceHashtableLock);
PhInitializeCallback(&PhServiceAddedEvent);
PhInitializeCallback(&PhServiceModifiedEvent);
+48 -46
View File
@@ -50,50 +50,17 @@ NTSTATUS PhpQueryObjectThreadStart(
HANDLE PhQueryObjectThreadHandle = NULL;
PVOID PhQueryObjectFiber = NULL;
PH_MUTEX PhQueryObjectMutex;
PH_QUEUED_LOCK PhQueryObjectMutex;
HANDLE PhQueryObjectStartEvent = NULL;
HANDLE PhQueryObjectCompletedEvent = NULL;
PH_QUERY_OBJECT_CONTEXT PhQueryObjectContext;
PPH_STRING PhObjectTypeNames[MAX_OBJECT_TYPE_NUMBER];
PPH_STRING PhObjectTypeNames[MAX_OBJECT_TYPE_NUMBER] = { 0 };
PPH_GET_CLIENT_ID_NAME PhHandleGetClientIdName = PhStdGetClientIdName;
static PPH_STRING HkcuPrefix;
static PPH_STRING HkcucrPrefix;
VOID PhHandleInfoInitialization()
{
PhInitializeMutex(&PhQueryObjectMutex);
memset(PhObjectTypeNames, 0, sizeof(PhObjectTypeNames));
{
PTOKEN_USER tokenUser;
PPH_STRING stringSid = NULL;
if (PhCurrentTokenQueryHandle)
{
if (NT_SUCCESS(PhGetTokenUser(
PhCurrentTokenQueryHandle,
&tokenUser
)))
{
stringSid = PhSidToStringSid(tokenUser->User.Sid);
PhFree(tokenUser);
}
}
if (stringSid)
{
HkcuPrefix = PhConcatStrings2(L"\\Registry\\User\\", stringSid->Buffer);
HkcucrPrefix = PhConcatStrings2(HkcuPrefix->Buffer, L"_Classes");
}
else
{
HkcuPrefix = PhCreateString(L"..."); // some random string that won't ever get matched
HkcucrPrefix = PhCreateString(L"...");
}
}
// Nothing
}
PPH_GET_CLIENT_ID_NAME PhSetHandleClientIdFunction(
@@ -353,8 +320,43 @@ PPH_STRING PhFormatNativeKeyName(
#define HKU_PREFIX L"\\Registry\\User"
#define HKU_PREFIX_LENGTH 14
static PH_INITONCE initOnce = PH_INITONCE_INIT;
static PPH_STRING hkcuPrefix;
static PPH_STRING hkcucrPrefix;
PPH_STRING newName;
if (PhBeginInitOnce(&initOnce))
{
PTOKEN_USER tokenUser;
PPH_STRING stringSid = NULL;
if (PhCurrentTokenQueryHandle)
{
if (NT_SUCCESS(PhGetTokenUser(
PhCurrentTokenQueryHandle,
&tokenUser
)))
{
stringSid = PhSidToStringSid(tokenUser->User.Sid);
PhFree(tokenUser);
}
}
if (stringSid)
{
hkcuPrefix = PhConcatStrings2(L"\\Registry\\User\\", stringSid->Buffer);
hkcucrPrefix = PhConcatStrings2(hkcuPrefix->Buffer, L"_Classes");
}
else
{
hkcuPrefix = PhCreateString(L"..."); // some random string that won't ever get matched
hkcucrPrefix = PhCreateString(L"...");
}
PhEndInitOnce(&initOnce);
}
if (PhStartsWithString2(Name, HKCR_PREFIX, TRUE))
{
newName = PhConcatStrings2(L"HKCR", &Name->Buffer[HKCR_PREFIX_LENGTH]);
@@ -363,16 +365,16 @@ PPH_STRING PhFormatNativeKeyName(
{
newName = PhConcatStrings2(L"HKLM", &Name->Buffer[HKLM_PREFIX_LENGTH]);
}
else if (PhStartsWithString(Name, HkcucrPrefix, TRUE))
else if (PhStartsWithString(Name, hkcucrPrefix, TRUE))
{
newName = PhConcatStrings2(
L"HKCU\\Software\\Classes",
&Name->Buffer[HkcucrPrefix->Length / 2]
&Name->Buffer[hkcucrPrefix->Length / 2]
);
}
else if (PhStartsWithString(Name, HkcuPrefix, TRUE))
else if (PhStartsWithString(Name, hkcuPrefix, TRUE))
{
newName = PhConcatStrings2(L"HKCU", &Name->Buffer[HkcuPrefix->Length / 2]);
newName = PhConcatStrings2(L"HKCU", &Name->Buffer[hkcuPrefix->Length / 2]);
}
else if (PhStartsWithString2(Name, HKU_PREFIX, TRUE))
{
@@ -1118,7 +1120,7 @@ CleanupExit:
BOOLEAN PhpHeadQueryObjectHack()
{
PhAcquireMutex(&PhQueryObjectMutex);
PhAcquireQueuedLockExclusive(&PhQueryObjectMutex);
// Create a query thread if we don't have one.
if (!PhQueryObjectThreadHandle)
@@ -1127,7 +1129,7 @@ BOOLEAN PhpHeadQueryObjectHack()
if (!PhQueryObjectThreadHandle)
{
PhReleaseMutex(&PhQueryObjectMutex);
PhReleaseQueuedLockExclusive(&PhQueryObjectMutex);
return FALSE;
}
}
@@ -1144,7 +1146,7 @@ BOOLEAN PhpHeadQueryObjectHack()
FALSE
)))
{
PhReleaseMutex(&PhQueryObjectMutex);
PhReleaseQueuedLockExclusive(&PhQueryObjectMutex);
return FALSE;
}
}
@@ -1159,7 +1161,7 @@ BOOLEAN PhpHeadQueryObjectHack()
FALSE
)))
{
PhReleaseMutex(&PhQueryObjectMutex);
PhReleaseQueuedLockExclusive(&PhQueryObjectMutex);
return FALSE;
}
}
@@ -1192,7 +1194,7 @@ NTSTATUS PhpTailQueryObjectHack(
status = PhQueryObjectContext.Status;
returnLength = PhQueryObjectContext.ReturnLength;
PhReleaseMutex(&PhQueryObjectMutex);
PhReleaseQueuedLockExclusive(&PhQueryObjectMutex);
if (ReturnLength)
*ReturnLength = returnLength;
@@ -1213,7 +1215,7 @@ NTSTATUS PhpTailQueryObjectHack(
PhQueryObjectFiber = NULL;
}
PhReleaseMutex(&PhQueryObjectMutex);
PhReleaseQueuedLockExclusive(&PhQueryObjectMutex);
return STATUS_UNSUCCESSFUL;
}
-72
View File
@@ -321,78 +321,6 @@ FORCEINLINE PVOID PhAllocateCopy(
return copy;
}
// mutex
//#define PH_MUTEX_IS_CRITICAL_SECTION
#ifdef PH_MUTEX_IS_CRITICAL_SECTION
typedef RTL_CRITICAL_SECTION PH_MUTEX, *PPH_MUTEX;
#else
typedef PH_QUEUED_LOCK PH_MUTEX, *PPH_MUTEX;
#endif
/**
* Initializes a mutex object.
*
* \param Mutex A pointer to a mutex object.
*/
FORCEINLINE VOID PhInitializeMutex(
__out PPH_MUTEX Mutex
)
{
#ifdef PH_MUTEX_IS_CRITICAL_SECTION
RtlInitializeCriticalSection(Mutex);
#else
PhInitializeQueuedLock(Mutex);
#endif
}
/**
* Frees resources used by a mutex object.
*
* \param Mutex A pointer to a mutex object.
*/
FORCEINLINE VOID PhDeleteMutex(
__inout PPH_MUTEX Mutex
)
{
#ifdef PH_MUTEX_IS_CRITICAL_SECTION
RtlDeleteCriticalSection(Mutex);
#endif
}
/**
* Acquires a mutex.
*
* \param Mutex A pointer to a mutex object.
*/
FORCEINLINE VOID PhAcquireMutex(
__inout PPH_MUTEX Mutex
)
{
#ifdef PH_MUTEX_IS_CRITICAL_SECTION
RtlEnterCriticalSection(Mutex);
#else
PhAcquireQueuedLockExclusive(Mutex);
#endif
}
/**
* Releases a mutex.
*
* \param Mutex A pointer to a mutex object.
*/
FORCEINLINE VOID PhReleaseMutex(
__inout PPH_MUTEX Mutex
)
{
#ifdef PH_MUTEX_IS_CRITICAL_SECTION
RtlLeaveCriticalSection(Mutex);
#else
PhReleaseQueuedLockExclusive(Mutex);
#endif
}
// event
#define PH_EVENT_SET 0x1
+1 -2
View File
@@ -44,7 +44,7 @@ static ULONG PhpAutoPoolTlsIndex;
#ifdef DEBUG
LIST_ENTRY PhDbgObjectListHead;
PH_QUEUED_LOCK PhDbgObjectListLock;
PH_QUEUED_LOCK PhDbgObjectListLock = PH_QUEUED_LOCK_INIT;
PPH_CREATE_OBJECT_HOOK PhDbgCreateObjectHook = NULL;
#endif
@@ -58,7 +58,6 @@ NTSTATUS PhInitializeRef()
#ifdef DEBUG
InitializeListHead(&PhDbgObjectListHead);
PhInitializeQueuedLock(&PhDbgObjectListLock);
#endif
PhInitializeFreeList(
+24 -22
View File
@@ -47,7 +47,10 @@ VOID PhpFreeSymbolModule(
PPH_OBJECT_TYPE PhSymbolProviderType;
HANDLE PhNextFakeHandle;
PH_MUTEX PhSymMutex;
PH_FAST_LOCK PhSymMutex = PH_FAST_LOCK_INIT;
#define PH_LOCK_SYMBOLS() PhAcquireFastLockExclusive(&PhSymMutex)
#define PH_UNLOCK_SYMBOLS() PhReleaseFastLockExclusive(&PhSymMutex)
_SymInitialize SymInitialize_I;
_SymCleanup SymCleanup_I;
@@ -85,7 +88,6 @@ BOOLEAN PhSymbolProviderInitialization()
return FALSE;
PhNextFakeHandle = (HANDLE)0;
PhInitializeMutex(&PhSymMutex);
return TRUE;
}
@@ -217,9 +219,9 @@ VOID NTAPI PhpSymbolProviderDeleteProcedure(
if (SymCleanup_I)
{
PhAcquireMutex(&PhSymMutex);
PH_LOCK_SYMBOLS();
SymCleanup_I(symbolProvider->ProcessHandle);
PhReleaseMutex(&PhSymMutex);
PH_UNLOCK_SYMBOLS();
}
for (i = 0; i < symbolProvider->ModulesList->Count; i++)
@@ -241,9 +243,9 @@ VOID PhpRegisterSymbolProvider(
{
if (SymInitialize_I)
{
PhAcquireMutex(&PhSymMutex);
PH_LOCK_SYMBOLS();
SymInitialize_I(SymbolProvider->ProcessHandle, NULL, FALSE);
PhReleaseMutex(&PhSymMutex);
PH_UNLOCK_SYMBOLS();
}
PhEndInitOnce(&SymbolProvider->InitOnce);
@@ -251,9 +253,9 @@ VOID PhpRegisterSymbolProvider(
#else
if (SymInitialize_I)
{
PhAcquireMutex(&PhSymMutex);
PH_LOCK_SYMBOLS();
SymInitialize_I(SymbolProvider->ProcessHandle, NULL, FALSE);
PhReleaseMutex(&PhSymMutex);
PH_UNLOCK_SYMBOLS();
}
#endif
}
@@ -306,7 +308,7 @@ BOOLEAN PhGetLineFromAddress(
line.SizeOfStruct = sizeof(IMAGEHLP_LINEW64);
PhAcquireMutex(&PhSymMutex);
PH_LOCK_SYMBOLS();
if (SymGetLineFromAddrW64_I)
{
@@ -341,7 +343,7 @@ BOOLEAN PhGetLineFromAddress(
}
}
PhReleaseMutex(&PhSymMutex);
PH_UNLOCK_SYMBOLS();
if (!result)
return FALSE;
@@ -476,7 +478,7 @@ PPH_STRING PhGetSymbolFromAddress(
// Get the symbol name.
PhAcquireMutex(&PhSymMutex);
PH_LOCK_SYMBOLS();
// Note that we don't care whether this call
// succeeds or not, based on the assumption that
@@ -512,7 +514,7 @@ PPH_STRING PhGetSymbolFromAddress(
PhpSymbolInfoAnsiToUnicode(symbolInfo, symbolInfoA);
}
PhReleaseMutex(&PhSymMutex);
PH_UNLOCK_SYMBOLS();
// Find the module name.
@@ -654,7 +656,7 @@ BOOLEAN PhGetSymbolFromName(
// Get the symbol information.
PhAcquireMutex(&PhSymMutex);
PH_LOCK_SYMBOLS();
if (SymFromNameW_I)
{
@@ -693,7 +695,7 @@ BOOLEAN PhGetSymbolFromName(
result = FALSE;
}
PhReleaseMutex(&PhSymMutex);
PH_UNLOCK_SYMBOLS();
if (!result)
return FALSE;
@@ -728,7 +730,7 @@ BOOLEAN PhLoadModuleSymbolProvider(
if (!fileName)
return FALSE;
PhAcquireMutex(&PhSymMutex);
PH_LOCK_SYMBOLS();
baseAddress = SymLoadModule64_I(
SymbolProvider->ProcessHandle,
NULL,
@@ -737,7 +739,7 @@ BOOLEAN PhLoadModuleSymbolProvider(
BaseAddress,
Size
);
PhReleaseMutex(&PhSymMutex);
PH_UNLOCK_SYMBOLS();
PhDereferenceObject(fileName);
// Add the module to the list, even if we couldn't load
@@ -800,14 +802,14 @@ VOID PhSetOptionsSymbolProvider(
PhpRegisterSymbolProvider(SymbolProvider);
#endif
PhAcquireMutex(&PhSymMutex);
PH_LOCK_SYMBOLS();
options = SymGetOptions_I();
options &= ~Mask;
options |= Value;
SymSetOptions_I(options);
PhReleaseMutex(&PhSymMutex);
PH_UNLOCK_SYMBOLS();
}
VOID PhSetSearchPathSymbolProvider(
@@ -822,7 +824,7 @@ VOID PhSetSearchPathSymbolProvider(
PhpRegisterSymbolProvider(SymbolProvider);
#endif
PhAcquireMutex(&PhSymMutex);
PH_LOCK_SYMBOLS();
if (SymSetSearchPathW_I)
{
@@ -837,7 +839,7 @@ VOID PhSetSearchPathSymbolProvider(
PhDereferenceObject(path);
}
PhReleaseMutex(&PhSymMutex);
PH_UNLOCK_SYMBOLS();
}
BOOLEAN PhStackWalk(
@@ -862,7 +864,7 @@ BOOLEAN PhStackWalk(
if (!GetModuleBaseRoutine)
GetModuleBaseRoutine = SymGetModuleBase64_I;
PhAcquireMutex(&PhSymMutex);
PH_LOCK_SYMBOLS();
result = StackWalk64_I(
MachineType,
ProcessHandle,
@@ -874,7 +876,7 @@ BOOLEAN PhStackWalk(
GetModuleBaseRoutine,
TranslateAddress
);
PhReleaseMutex(&PhSymMutex);
PH_UNLOCK_SYMBOLS();
return result;
}