summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
authorAndrey Kleshchev <andreykproductengine@lindenlab.com>2023-11-22 01:01:12 +0200
committerAndrey Kleshchev <andreykproductengine@lindenlab.com>2023-11-22 02:31:12 +0200
commitd3da20d63f6ddf6f3760208d7db130d15860e852 (patch)
treecad36b0b2730d0864d49ee265f980f2906cdd707 /indra
parentbfcc7a92b3c5f62c79879b8234c7055a3a83d9a5 (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.cpp8
-rw-r--r--indra/newview/llmachineid.cpp1
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;
}