Index: device/bluetooth/bluetooth_socket_chromeos.cc |
diff --git a/device/bluetooth/bluetooth_socket_chromeos.cc b/device/bluetooth/bluetooth_socket_chromeos.cc |
index c193c1f1d906f83972d880403205d6d823015969..3026113a5cb9a1de191b98e29b04759b29129b4e 100644 |
--- a/device/bluetooth/bluetooth_socket_chromeos.cc |
+++ b/device/bluetooth/bluetooth_socket_chromeos.cc |
@@ -110,8 +110,6 @@ |
if (security_level == SECURITY_LEVEL_LOW) |
options_->require_authentication.reset(new bool(false)); |
- adapter_ = device->adapter(); |
- |
RegisterProfile(device->adapter(), success_callback, error_callback); |
} |
@@ -130,8 +128,7 @@ |
return; |
} |
- adapter_ = adapter; |
- adapter_->AddObserver(this); |
+ adapter->AddObserver(this); |
uuid_ = uuid; |
options_.reset(new BluetoothProfileManagerClient::Options()); |
@@ -224,10 +221,12 @@ |
DCHECK(!profile_); |
DCHECK(adapter); |
+ adapter_ = adapter; |
+ |
// If the adapter is not present, this is a listening socket and the |
// adapter isn't running yet. Report success and carry on; |
// the profile will be registered when the daemon becomes available. |
- if (!adapter->IsPresent()) { |
+ if (!adapter_->IsPresent()) { |
VLOG(1) << uuid_.canonical_value() << " on " << device_path_.value() |
<< ": Delaying profile registration."; |
base::MessageLoop::current()->PostTask(FROM_HERE, success_callback); |
@@ -310,7 +309,7 @@ |
DCHECK(ui_task_runner()->RunsTasksOnCurrentThread()); |
if (!present) { |
- // Adapter removed, we can't use the profile anymore. |
+ // Adapter removed, the profile is now invalid. |
UnregisterProfile(); |
return; |
} |
@@ -550,9 +549,20 @@ |
VLOG(1) << profile_->object_path().value() << ": Release profile"; |
- static_cast<BluetoothAdapterChromeOS*>(adapter_.get()) |
- ->ReleaseProfile(device_path_, profile_); |
+ profile_->RemoveDelegate( |
+ device_path_, |
+ base::Bind(&BluetoothSocketChromeOS::ReleaseProfile, this, profile_)); |
+ |
profile_ = nullptr; |
} |
+void BluetoothSocketChromeOS::ReleaseProfile( |
+ BluetoothAdapterProfileChromeOS* profile) { |
+ if (adapter_) |
+ static_cast<BluetoothAdapterChromeOS*>(adapter_.get()) |
+ ->ReleaseProfile(uuid_); |
+ else |
+ delete profile; |
+} |
+ |
} // namespace chromeos |