From 9baa10cff3dc4557ff62b3e7f4fe1685c40e7721 Mon Sep 17 00:00:00 2001 From: Edwin Wu Date: Tue, 14 Oct 2025 21:48:21 -0700 Subject: [PATCH] Add delays in `MediumEnvironment::Stop()` and test teardown to prevent use-after-free. PiperOrigin-RevId: 819561773 --- .../mediums/ble/discovered_peripheral_tracker_test.cc | 8 ++++++++ internal/platform/medium_environment.cc | 1 - 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/connections/implementation/mediums/ble/discovered_peripheral_tracker_test.cc b/connections/implementation/mediums/ble/discovered_peripheral_tracker_test.cc index 52eed33e..f7462169 100644 --- a/connections/implementation/mediums/ble/discovered_peripheral_tracker_test.cc +++ b/connections/implementation/mediums/ble/discovered_peripheral_tracker_test.cc @@ -71,6 +71,11 @@ constexpr absl::string_view kDeviceToken = "\x04\x20"; constexpr absl::string_view kDeviceName = "device"; constexpr absl::Duration kDefaultGattFetchDelay = absl::Milliseconds(200); +// Delay to allow background threads to complete during teardown. +// This helps prevent use-after-free errors on resources like FakeClock +// used by background tasks (e.g., in PendingJobRegistry). +constexpr absl::Duration kTeardownDelay = absl::Milliseconds(400); + ByteArray CreateFastBleAdvertisement(const ByteArray& data, const ByteArray& device_token) { return ByteArray(BleAdvertisement( @@ -218,6 +223,9 @@ class DiscoveredPeripheralTrackerTest void TearDown() override { discovered_peripheral_tracker_.reset(); + + // Add a small delay to allow background threads to complete. + absl::SleepFor(kTeardownDelay); MediumEnvironment::Instance().Stop(); NearbyFlags::GetInstance().ResetOverridedValues(); } diff --git a/internal/platform/medium_environment.cc b/internal/platform/medium_environment.cc index 581ff972..0d120e97 100644 --- a/internal/platform/medium_environment.cc +++ b/internal/platform/medium_environment.cc @@ -24,7 +24,6 @@ #include "absl/container/flat_hash_set.h" #include "absl/status/status.h" -#include "absl/strings/escaping.h" #include "absl/strings/str_format.h" #include "absl/strings/string_view.h" #include "absl/time/time.h"