From 31c028e16d234ea45ad50a585f87f932a2bf4b8f Mon Sep 17 00:00:00 2001 From: wj32 Date: Sat, 21 Aug 2010 02:32:51 +0000 Subject: [PATCH] removed PH_MUTEX git-svn-id: svn://svn.code.sf.net/p/processhacker/code@3516 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- 2.x/trunk/HACKING.txt | 4 -- 2.x/trunk/ProcessHacker/dbgcon.c | 38 ++++++------ 2.x/trunk/ProcessHacker/findobj.c | 16 +++-- 2.x/trunk/ProcessHacker/settings.c | 3 +- 2.x/trunk/ProcessHacker/srvprv.c | 3 +- 2.x/trunk/phlib/hndlinfo.c | 94 +++++++++++++++--------------- 2.x/trunk/phlib/include/phbase.h | 72 ----------------------- 2.x/trunk/phlib/ref.c | 3 +- 2.x/trunk/phlib/symprv.c | 46 ++++++++------- 9 files changed, 101 insertions(+), 178 deletions(-) diff --git a/2.x/trunk/HACKING.txt b/2.x/trunk/HACKING.txt index 274fe0106..e078a8dd6 100644 --- a/2.x/trunk/HACKING.txt +++ b/2.x/trunk/HACKING.txt @@ -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. diff --git a/2.x/trunk/ProcessHacker/dbgcon.c b/2.x/trunk/ProcessHacker/dbgcon.c index 761ff66cc..d8c72dafe 100644 --- a/2.x/trunk/ProcessHacker/dbgcon.c +++ b/2.x/trunk/ProcessHacker/dbgcon.c @@ -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 diff --git a/2.x/trunk/ProcessHacker/findobj.c b/2.x/trunk/ProcessHacker/findobj.c index 9e1b8c668..903013882 100644 --- a/2.x/trunk/ProcessHacker/findobj.c +++ b/2.x/trunk/ProcessHacker/findobj.c @@ -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 { diff --git a/2.x/trunk/ProcessHacker/settings.c b/2.x/trunk/ProcessHacker/settings.c index 2d2d6859a..3357eba06 100644 --- a/2.x/trunk/ProcessHacker/settings.c +++ b/2.x/trunk/ProcessHacker/settings.c @@ -26,7 +26,7 @@ #include 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"); diff --git a/2.x/trunk/ProcessHacker/srvprv.c b/2.x/trunk/ProcessHacker/srvprv.c index 922f222db..139059253 100644 --- a/2.x/trunk/ProcessHacker/srvprv.c +++ b/2.x/trunk/ProcessHacker/srvprv.c @@ -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); diff --git a/2.x/trunk/phlib/hndlinfo.c b/2.x/trunk/phlib/hndlinfo.c index 121322f35..fa305ccd6 100644 --- a/2.x/trunk/phlib/hndlinfo.c +++ b/2.x/trunk/phlib/hndlinfo.c @@ -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; } diff --git a/2.x/trunk/phlib/include/phbase.h b/2.x/trunk/phlib/include/phbase.h index 08150314c..a91d51f68 100644 --- a/2.x/trunk/phlib/include/phbase.h +++ b/2.x/trunk/phlib/include/phbase.h @@ -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 diff --git a/2.x/trunk/phlib/ref.c b/2.x/trunk/phlib/ref.c index d87b4bc87..8e6c89801 100644 --- a/2.x/trunk/phlib/ref.c +++ b/2.x/trunk/phlib/ref.c @@ -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( diff --git a/2.x/trunk/phlib/symprv.c b/2.x/trunk/phlib/symprv.c index 31a726cb4..73c054879 100644 --- a/2.x/trunk/phlib/symprv.c +++ b/2.x/trunk/phlib/symprv.c @@ -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; }