Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2462)

Unified Diff: device/bluetooth/bluetooth_adapter_profile_chromeos.cc

Issue 935383003: Fix BluetoothAdapterProfileChromeOS lifecycle management (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix for leak detected by LSAN Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: device/bluetooth/bluetooth_adapter_profile_chromeos.cc
diff --git a/device/bluetooth/bluetooth_adapter_profile_chromeos.cc b/device/bluetooth/bluetooth_adapter_profile_chromeos.cc
index 2feff37aed352abdbf8c54b8f42ecd096f465639..f8f1e7aaecfebd8e356b25f433c69eba94e9131b 100644
--- a/device/bluetooth/bluetooth_adapter_profile_chromeos.cc
+++ b/device/bluetooth/bluetooth_adapter_profile_chromeos.cc
@@ -18,30 +18,40 @@
namespace chromeos {
+namespace {
+
+void OnRegisterProfileError(
+ BluetoothAdapterProfileChromeOS* profile,
+ const BluetoothProfileManagerClient::ErrorCallback& error_callback,
+ const std::string& error_name,
+ const std::string& error_message) {
+ delete profile;
+ error_callback.Run(error_name, error_message);
+}
+
+} // anonymous namespace
+
// static
-BluetoothAdapterProfileChromeOS* BluetoothAdapterProfileChromeOS::Register(
- BluetoothAdapterChromeOS* adapter,
+void BluetoothAdapterProfileChromeOS::Register(
const device::BluetoothUUID& uuid,
const BluetoothProfileManagerClient::Options& options,
- const base::Closure& success_callback,
+ const BluetoothAdapterChromeOS::ProfileRegisteredCallback& success_callback,
const BluetoothProfileManagerClient::ErrorCallback& error_callback) {
- DCHECK(adapter);
-
BluetoothAdapterProfileChromeOS* profile =
- new BluetoothAdapterProfileChromeOS(adapter, uuid);
+ new BluetoothAdapterProfileChromeOS(uuid);
VLOG(1) << "Registering profile: " << profile->object_path().value();
DBusThreadManager::Get()->GetBluetoothProfileManagerClient()->RegisterProfile(
- profile->object_path(), uuid.canonical_value(), options, success_callback,
- error_callback);
-
- return profile;
+ profile->object_path(),
+ uuid.canonical_value(),
+ options,
+ base::Bind(success_callback, profile),
+ base::Bind(OnRegisterProfileError, profile, error_callback));
}
BluetoothAdapterProfileChromeOS::BluetoothAdapterProfileChromeOS(
- BluetoothAdapterChromeOS* adapter,
const device::BluetoothUUID& uuid)
- : uuid_(uuid), adapter_(adapter), weak_ptr_factory_(this) {
+ : uuid_(uuid), weak_ptr_factory_(this) {
std::string uuid_path;
base::ReplaceChars(uuid.canonical_value(), ":-", "_", &uuid_path);
object_path_ =
@@ -54,7 +64,6 @@ BluetoothAdapterProfileChromeOS::BluetoothAdapterProfileChromeOS(
}
BluetoothAdapterProfileChromeOS::~BluetoothAdapterProfileChromeOS() {
- profile_.reset();
}
bool BluetoothAdapterProfileChromeOS::SetDelegate(
« no previous file with comments | « device/bluetooth/bluetooth_adapter_profile_chromeos.h ('k') | device/bluetooth/bluetooth_adapter_profile_chromeos_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698