[fuchsia] Fix ASAN error by handling teardown tasks in unit test.
Ensures that the teardown tasks are processed once the test finishes,
otherwise leaks are reported by ASAN.
Fixed: 1369193
Change-Id: Ied3cf4268dd2205119ff1422795da1f33f28d792
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3928307
Reviewed-by: Sami Kyöstilä <skyostil@chromium.org>
Reviewed-by: Fabrice de Gans <fdegans@chromium.org>
Commit-Queue: Sami Kyöstilä <skyostil@chromium.org>
Auto-Submit: Kevin Marshall <kmarshall@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1053365}
diff --git a/services/tracing/public/cpp/fuchsia_perfetto_producer_connector_unittest.cc b/services/tracing/public/cpp/fuchsia_perfetto_producer_connector_unittest.cc
index f6e3b01..64ca68d2 100644
--- a/services/tracing/public/cpp/fuchsia_perfetto_producer_connector_unittest.cc
+++ b/services/tracing/public/cpp/fuchsia_perfetto_producer_connector_unittest.cc
@@ -104,8 +104,9 @@
class FuchsiaPerfettoProducerConnectorTest : public testing::Test {
public:
FuchsiaPerfettoProducerConnectorTest()
- : task_environment_(base::test::TaskEnvironment::MainThreadType::IO),
- connector_client_(task_environment_.GetMainThreadTaskRunner()) {}
+ : task_environment_(base::test::TaskEnvironment::MainThreadType::IO) {
+ connector_client_.emplace(task_environment_.GetMainThreadTaskRunner());
+ }
~FuchsiaPerfettoProducerConnectorTest() override = default;
void SetUp() override {
@@ -114,13 +115,19 @@
fidl::InterfaceHandle<fuchsia::tracing::perfetto::ProducerConnector>
client_handle;
service_.emplace(service_thread_.task_runner(), client_handle.NewRequest());
- connector_client_.SetProducerServiceForTest(std::move(client_handle));
+ connector_client_->SetProducerServiceForTest(std::move(client_handle));
+ }
+
+ void TearDown() override {
+ // Tear down the connector and handle the resulting async deletion task.
+ connector_client_.reset();
+ base::RunLoop().RunUntilIdle();
}
protected:
bool Connect(base::ScopedFD* socket_fd,
base::OnceCallback<int()>* receive_fd_cb) {
- auto conn_args = connector_client_.Connect();
+ auto conn_args = connector_client_->Connect();
if (!conn_args) {
return false;
}
@@ -132,7 +139,7 @@
}
base::test::SingleThreadTaskEnvironment task_environment_;
- FuchsiaPerfettoProducerConnector connector_client_;
+ absl::optional<FuchsiaPerfettoProducerConnector> connector_client_;
// The fake service runs on a separate thread so that it can respond
// when synchronous calls are made to it from the main thread.