Merge pull request #2195 from jpark37/com-sta

Clean up COM initialization
This commit is contained in:
Jim
2019-11-24 10:38:18 -08:00
committed by GitHub
3 changed files with 24 additions and 6 deletions
+8 -2
View File
@@ -1259,9 +1259,15 @@ void obs_init_win32_crash_handler(void)
initialize_crash_handler();
}
void initialize_com(void)
bool initialize_com(void)
{
CoInitializeEx(0, COINIT_MULTITHREADED);
const HRESULT hr = CoInitializeEx(0, COINIT_APARTMENTTHREADED);
const bool success = SUCCEEDED(hr);
if (success)
blog(LOG_INFO, "CoInitializeEx succeeded: 0x%08X", hr);
else
blog(LOG_ERROR, "CoInitializeEx failed: 0x%08X", hr);
return success;
}
void uninitialize_com(void)
+5 -3
View File
@@ -871,8 +871,9 @@ static bool obs_init(const char *locale, const char *module_config_path,
}
#ifdef _WIN32
extern void initialize_com(void);
extern bool initialize_com(void);
extern void uninitialize_com(void);
static bool com_initialized = false;
#endif
/* Separate from actual context initialization
@@ -933,7 +934,7 @@ bool obs_startup(const char *locale, const char *module_config_path,
}
#ifdef _WIN32
initialize_com();
com_initialized = initialize_com();
#endif
success = obs_init(locale, module_config_path, store);
@@ -1048,7 +1049,8 @@ void obs_shutdown(void)
bfree(cmdline_args.argv);
#ifdef _WIN32
uninitialize_com();
if (com_initialized)
uninitialize_com();
#endif
}
+11 -1
View File
@@ -386,7 +386,14 @@ DWORD WINAPI WASAPISource::ReconnectThread(LPVOID param)
os_set_thread_name("win-wasapi: reconnect thread");
CoInitializeEx(0, COINIT_MULTITHREADED);
const HRESULT hr = CoInitializeEx(0, COINIT_MULTITHREADED);
const bool com_initialized = SUCCEEDED(hr);
if (!com_initialized) {
blog(LOG_ERROR,
"[WASAPISource::ReconnectThread]"
" CoInitializeEx failed: 0x%08X",
hr);
}
obs_monitoring_type type =
obs_source_get_monitoring_type(source->source);
@@ -400,6 +407,9 @@ DWORD WINAPI WASAPISource::ReconnectThread(LPVOID param)
obs_source_set_monitoring_type(source->source, type);
if (com_initialized)
CoUninitialize();
source->reconnectThread = nullptr;
source->reconnecting = false;
return 0;