SL-20603 Crash on CoInitialize

Don't mix CoInitialize and CoInitializeEx, one is global, other is
threaded.
CoInitialize(0) is equal to CoInitializeEx(0, COINIT_APARTMENTTHREADED)
and MULTITHREADED is not compatible with APARTMENTTHREADED.
meow-7.2.2
Andrey Kleshchev 2023-11-22 01:01:12 +02:00
parent bfcc7a92b3
commit d3da20d63f
2 changed files with 5 additions and 4 deletions

View File

@ -71,7 +71,7 @@ HRESULT GetVideoMemoryViaWMI(WCHAR* strInputDeviceID, DWORD* pdwAdapterRam)
BSTR pNamespace = nullptr;
*pdwAdapterRam = 0;
hrCoInitialize = CoInitialize( 0 );
hrCoInitialize = CoInitializeEx(0, COINIT_MULTITHREADED);
hr = CoCreateInstance( CLSID_WbemLocator,
nullptr,
@ -234,7 +234,7 @@ std::string LLDXHardware::getDriverVersionWMI(EGPUVendor vendor)
std::string mDriverVersion;
HRESULT hrCoInitialize = S_OK;
HRESULT hres;
hrCoInitialize = CoInitialize(0);
hrCoInitialize = CoInitializeEx(0, COINIT_MULTITHREADED);
IWbemLocator *pLoc = NULL;
hres = CoCreateInstance(
@ -687,7 +687,7 @@ BOOL LLDXHardware::getInfo(BOOL vram_only)
BOOL ok = FALSE;
HRESULT hr;
CoInitialize(NULL);
CoInitializeEx(NULL, COINIT_MULTITHREADED);
IDxDiagProvider *dx_diag_providerp = NULL;
IDxDiagContainer *dx_diag_rootp = NULL;
@ -976,7 +976,7 @@ LLSD LLDXHardware::getDisplayInfo()
LLTimer hw_timer;
HRESULT hr;
LLSD ret;
CoInitialize(NULL);
CoInitializeEx(NULL, COINIT_MULTITHREADED);
IDxDiagProvider *dx_diag_providerp = NULL;
IDxDiagContainer *dx_diag_rootp = NULL;

View File

@ -88,6 +88,7 @@ void LLWMIMethods::initCOMObjects()
mHR = CoInitializeEx(0, COINIT_MULTITHREADED);
if (FAILED(mHR))
{
// if result S_FALSE, it's already initialized
LL_DEBUGS("AppInit") << "Failed to initialize COM library. Error code = 0x" << std::hex << mHR << LL_ENDL;
return;
}