From c184b93fc52f578b559511ec059bab4098d1404c Mon Sep 17 00:00:00 2001 From: Shelley Vohr Date: Tue, 9 Jan 2024 09:41:42 +0100 Subject: [PATCH] fix: crash using `powerMonitor` before ready event (#40888) * fix: crash using powerMonitor before ready event * refactor: continue using DBusBluezManagerWrapperLinux --- shell/browser/electron_browser_main_parts.cc | 4 +++- shell/browser/lib/power_observer_linux.cc | 5 +++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/shell/browser/electron_browser_main_parts.cc b/shell/browser/electron_browser_main_parts.cc index 7418f13fa66d..1638f64c0400 100644 --- a/shell/browser/electron_browser_main_parts.cc +++ b/shell/browser/electron_browser_main_parts.cc @@ -81,6 +81,7 @@ #include "base/environment.h" #include "chrome/browser/ui/views/dark_mode_manager_linux.h" #include "device/bluetooth/bluetooth_adapter_factory.h" +#include "device/bluetooth/dbus/bluez_dbus_manager.h" #include "device/bluetooth/dbus/dbus_bluez_manager_wrapper_linux.h" #include "electron/electron_gtk_stubs.h" #include "ui/base/cursor/cursor_factory.h" @@ -508,7 +509,8 @@ void ElectronBrowserMainParts::PostCreateMainMessageLoop() { ui::OzonePlatform::GetInstance()->PostCreateMainMessageLoop( std::move(shutdown_cb), content::GetUIThreadTaskRunner({content::BrowserTaskType::kUserInput})); - bluez::DBusBluezManagerWrapperLinux::Initialize(); + if (!bluez::BluezDBusManager::IsInitialized()) + bluez::DBusBluezManagerWrapperLinux::Initialize(); // Set up crypt config. This needs to be done before anything starts the // network service, as the raw encryption key needs to be shared with the diff --git a/shell/browser/lib/power_observer_linux.cc b/shell/browser/lib/power_observer_linux.cc index 881c40c0fb0b..5d881a8adda1 100644 --- a/shell/browser/lib/power_observer_linux.cc +++ b/shell/browser/lib/power_observer_linux.cc @@ -11,7 +11,9 @@ #include "base/files/file_path.h" #include "base/functional/bind.h" #include "base/logging.h" +#include "device/bluetooth/dbus/bluez_dbus_manager.h" #include "device/bluetooth/dbus/bluez_dbus_thread_manager.h" +#include "device/bluetooth/dbus/dbus_bluez_manager_wrapper_linux.h" namespace { @@ -34,6 +36,9 @@ PowerObserverLinux::PowerObserverLinux( base::PowerSuspendObserver* suspend_observer) : suspend_observer_(suspend_observer), lock_owner_name_(GetExecutableBaseName()) { + if (!bluez::BluezDBusManager::IsInitialized()) + bluez::DBusBluezManagerWrapperLinux::Initialize(); + auto* bus = bluez::BluezDBusThreadManager::Get()->GetSystemBus(); if (!bus) { LOG(WARNING) << "Failed to get system bus connection";