diff options
author | Andrey Kleshchev <andreykproductengine@lindenlab.com> | 2023-11-22 01:01:12 +0200 |
---|---|---|
committer | Andrey Kleshchev <andreykproductengine@lindenlab.com> | 2023-11-22 02:31:12 +0200 |
commit | d3da20d63f6ddf6f3760208d7db130d15860e852 (patch) | |
tree | cad36b0b2730d0864d49ee265f980f2906cdd707 /indra | |
parent | bfcc7a92b3c5f62c79879b8234c7055a3a83d9a5 (diff) |
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.
Diffstat (limited to 'indra')
-rw-r--r-- | indra/llwindow/lldxhardware.cpp | 8 | ||||
-rw-r--r-- | indra/newview/llmachineid.cpp | 1 |
2 files changed, 5 insertions, 4 deletions
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; } |