From d3da20d63f6ddf6f3760208d7db130d15860e852 Mon Sep 17 00:00:00 2001 From: Andrey Kleshchev Date: Wed, 22 Nov 2023 01:01:12 +0200 Subject: 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. --- indra/llwindow/lldxhardware.cpp | 8 ++++---- indra/newview/llmachineid.cpp | 1 + 2 files changed, 5 insertions(+), 4 deletions(-) (limited to 'indra') diff --git a/indra/llwindow/lldxhardware.cpp b/indra/llwindow/lldxhardware.cpp index 391a377280..07856edefc 100644 --- a/indra/llwindow/lldxhardware.cpp +++ b/indra/llwindow/lldxhardware.cpp @@ -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; diff --git a/indra/newview/llmachineid.cpp b/indra/newview/llmachineid.cpp index 583742f970..8f03b13d2d 100644 --- a/indra/newview/llmachineid.cpp +++ b/indra/newview/llmachineid.cpp @@ -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; } -- cgit v1.2.3