OSDN Git Service

AVRCP: Advance iterator before deleting it
authorHansong Zhang <hsz@google.com>
Wed, 7 Oct 2020 21:50:15 +0000 (14:50 -0700)
committerHansong Zhang <hsz@google.com>
Thu, 8 Oct 2020 00:31:38 +0000 (00:31 +0000)
When we invoke instance_->avrc_->Close(), it will invoke the callback in
AcceptorControlCb by the state machine from AVCT, and the iterator will
be deleted. Now we advanece the iterator first.

Bug: 169747177
Test: Connect to a speaker with AVRCP, and turn off Bluetooth
Tag: #stability
Change-Id: If4ed403d355242da48b7ee49dd74784f43de1b1d

profile/avrcp/connection_handler.cc

index af8fb57..797a779 100644 (file)
@@ -85,9 +85,12 @@ bool ConnectionHandler::CleanUp() {
   CHECK(instance_ != nullptr);
 
   // TODO (apanicke): Cleanup the SDP Entries here
-  for (const auto& entry : instance_->device_map_) {
-    entry.second->DeviceDisconnected();
-    instance_->avrc_->Close(entry.first);
+  for (auto entry = instance_->device_map_.begin();
+       entry != instance_->device_map_.end();) {
+    auto curr = entry;
+    entry++;
+    curr->second->DeviceDisconnected();
+    instance_->avrc_->Close(curr->first);
   }
   instance_->device_map_.clear();
   instance_->feature_map_.clear();