From 2c90a61fcaf32c0dbb19e39980b8200f2f41dcbd Mon Sep 17 00:00:00 2001 From: Guogang Li Date: Wed, 14 Jun 2023 09:34:29 -0700 Subject: [PATCH] Fixed crash when flag update in peripheral tracker PiperOrigin-RevId: 540294615 --- .../ble_v2/discovered_peripheral_tracker.cc | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/connections/implementation/mediums/ble_v2/discovered_peripheral_tracker.cc b/connections/implementation/mediums/ble_v2/discovered_peripheral_tracker.cc index b03b34b2..3153ca1f 100644 --- a/connections/implementation/mediums/ble_v2/discovered_peripheral_tracker.cc +++ b/connections/implementation/mediums/ble_v2/discovered_peripheral_tracker.cc @@ -57,7 +57,9 @@ DiscoveredPeripheralTracker::~DiscoveredPeripheralTracker() { config_package_nearby::nearby_connections_feature:: kEnableGattQueryInThread)) { MutexLock lock(&mutex_); - executor_->Shutdown(); + if (executor_ != nullptr) { + executor_->Shutdown(); + } } } @@ -516,9 +518,13 @@ void DiscoveredPeripheralTracker::HandleAdvertisementHeader( config_package_nearby::nearby_connections_feature:: kEnableGattQueryInThread)) { NEARBY_LOGS(VERBOSE) << ": Handle GATT advertisement " - << absl::BytesToHexString( - ByteArray(advertisement_header).data()) - << " in thread"; + << absl::BytesToHexString( + ByteArray(advertisement_header).data()) + << " in thread"; + if (executor_ == nullptr) { + // The situation happens when flag value changed + executor_ = std::make_unique(kGattThreadCount); + } executor_->Execute([this, peripheral, advertisement_header, advertisement_fetcher = std::move(advertisement_fetcher)]() {