Skip to content

Commit

Permalink
[windows] Use ordinary imports for Ro{I,Uni}nitialize
Browse files Browse the repository at this point in the history
Bug: 1384167
Change-Id: I12d3b3a8b99788e889098c67cd646217a35991d3
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4800454
Auto-Submit: Greg Thompson <[email protected]>
Reviewed-by: Robert Liao <[email protected]>
Commit-Queue: Robert Liao <[email protected]>
Cr-Commit-Position: refs/heads/main@{#1186814}
  • Loading branch information
GregTho authored and Chromium LUCI CQ committed Aug 22, 2023
1 parent 9140468 commit ec863f4
Showing 1 changed file with 2 additions and 49 deletions.
51 changes: 2 additions & 49 deletions base/win/scoped_winrt_initializer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -5,61 +5,14 @@
#include "base/win/scoped_winrt_initializer.h"

#include <roapi.h>
#include <windows.h>

#include <ostream>

#include "base/check_op.h"
#include "base/threading/scoped_thread_priority.h"
#include "base/win/com_init_util.h"
#include "base/win/core_winrt_util.h"

namespace base::win {

namespace {

FARPROC LoadComBaseFunction(const char* function_name) {
static HMODULE const handle = []() {
// Mitigate the issues caused by loading DLLs on a background thread
// (http://crbug/973868).
SCOPED_MAY_LOAD_LIBRARY_AT_BACKGROUND_PRIORITY();
return ::LoadLibraryEx(L"combase.dll", nullptr,
LOAD_LIBRARY_SEARCH_SYSTEM32);
}();
return handle ? ::GetProcAddress(handle, function_name) : nullptr;
}

decltype(&::RoInitialize) GetRoInitializeFunction() {
static decltype(&::RoInitialize) const function =
reinterpret_cast<decltype(&::RoInitialize)>(
LoadComBaseFunction("RoInitialize"));
return function;
}

decltype(&::RoUninitialize) GetRoUninitializeFunction() {
static decltype(&::RoUninitialize) const function =
reinterpret_cast<decltype(&::RoUninitialize)>(
LoadComBaseFunction("RoUninitialize"));
return function;
}

HRESULT CallRoInitialize(RO_INIT_TYPE init_type) {
auto ro_initialize_func = GetRoInitializeFunction();
if (!ro_initialize_func)
return E_FAIL;
return ro_initialize_func(init_type);
}

void CallRoUninitialize() {
auto ro_uninitialize_func = GetRoUninitializeFunction();
if (ro_uninitialize_func)
ro_uninitialize_func();
}

} // namespace

ScopedWinrtInitializer::ScopedWinrtInitializer()
: hr_(CallRoInitialize(RO_INIT_MULTITHREADED)) {
: hr_(::RoInitialize(RO_INIT_MULTITHREADED)) {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
#if DCHECK_IS_ON()
if (SUCCEEDED(hr_))
Expand All @@ -72,7 +25,7 @@ ScopedWinrtInitializer::ScopedWinrtInitializer()
ScopedWinrtInitializer::~ScopedWinrtInitializer() {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
if (SUCCEEDED(hr_))
CallRoUninitialize();
::RoUninitialize();
}

bool ScopedWinrtInitializer::Succeeded() const {
Expand Down

0 comments on commit ec863f4

Please sign in to comment.