Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 30348b08 authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "AddressManager: safely unregister client" am: 32622f3a am: 1afeff5e

Original change: https://android-review.googlesource.com/c/platform/packages/modules/Bluetooth/+/1952543

Change-Id: I61027db91c2e674382fa6b4f893d723afc989637
parents a0e44756 1afeff5e
Loading
Loading
Loading
Loading
+14 −4
Original line number Diff line number Diff line
@@ -164,7 +164,14 @@ void LeAddressManager::Unregister(LeAddressManagerCallback* callback) {
}

void LeAddressManager::unregister_client(LeAddressManagerCallback* callback) {
  if (registered_clients_.find(callback) != registered_clients_.end()) {
    if (registered_clients_.find(callback)->second == ClientState::WAITING_FOR_PAUSE) {
      ack_pause(callback);
    } else if (registered_clients_.find(callback)->second == ClientState::WAITING_FOR_RESUME) {
      ack_resume(callback);
    }
    registered_clients_.erase(callback);
  }
  if (registered_clients_.empty() && address_rotation_alarm_ != nullptr) {
    address_rotation_alarm_->Cancel();
  }
@@ -207,7 +214,9 @@ void LeAddressManager::push_command(Command command) {
}

void LeAddressManager::ack_pause(LeAddressManagerCallback* callback) {
  ASSERT(registered_clients_.find(callback) != registered_clients_.end());
  if (registered_clients_.find(callback) == registered_clients_.end()) {
    return;
  }
  registered_clients_.find(callback)->second = ClientState::PAUSED;
  for (auto client : registered_clients_) {
    if (client.second != ClientState::PAUSED) {
@@ -235,9 +244,10 @@ void LeAddressManager::resume_registered_clients() {
}

void LeAddressManager::ack_resume(LeAddressManagerCallback* callback) {
  ASSERT(registered_clients_.find(callback) != registered_clients_.end());
  if (registered_clients_.find(callback) != registered_clients_.end()) {
    registered_clients_.find(callback)->second = ClientState::RESUMED;
  }
}

void LeAddressManager::prepare_to_rotate() {
  Command command = {CommandType::ROTATE_RANDOM_ADDRESS, nullptr};