summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--system/gd/hci/le_address_manager.cc15
1 files changed, 10 insertions, 5 deletions
diff --git a/system/gd/hci/le_address_manager.cc b/system/gd/hci/le_address_manager.cc
index 6d1806d809..28f51004a7 100644
--- a/system/gd/hci/le_address_manager.cc
+++ b/system/gd/hci/le_address_manager.cc
@@ -230,6 +230,11 @@ void LeAddressManager::ack_pause(LeAddressManagerCallback* callback) {
for (auto client : registered_clients_) {
if (client.second != ClientState::PAUSED) {
// make sure all client paused
+ if (client.second != ClientState::WAITING_FOR_PAUSE) {
+ LOG_DEBUG("Trigger OnPause for client that not paused and not waiting for pause");
+ client.second = ClientState::WAITING_FOR_PAUSE;
+ client.first->OnPause();
+ }
return;
}
}
@@ -421,9 +426,9 @@ void LeAddressManager::AddDeviceToResolvingList(
cached_commands_.push(std::move(enable));
if (registered_clients_.empty()) {
- handle_next_command();
+ handler_->BindOnceOn(this, &LeAddressManager::handle_next_command).Invoke();
} else {
- pause_registered_clients();
+ handler_->BindOnceOn(this, &LeAddressManager::pause_registered_clients).Invoke();
}
}
@@ -452,9 +457,9 @@ void LeAddressManager::RemoveDeviceFromResolvingList(
cached_commands_.push(std::move(enable));
if (registered_clients_.empty()) {
- handle_next_command();
+ handler_->BindOnceOn(this, &LeAddressManager::handle_next_command).Invoke();
} else {
- pause_registered_clients();
+ handler_->BindOnceOn(this, &LeAddressManager::pause_registered_clients).Invoke();
}
}
@@ -479,7 +484,7 @@ void LeAddressManager::ClearResolvingList() {
Command enable = {CommandType::SET_ADDRESS_RESOLUTION_ENABLE, std::move(enable_builder)};
cached_commands_.push(std::move(enable));
- pause_registered_clients();
+ handler_->BindOnceOn(this, &LeAddressManager::pause_registered_clients).Invoke();
}
template <class View>