heapprofd: Fix crash when tracing service disconnects
When the tracing service (traced) disconnects (because it crashes or
other reasons), if heapprofd has an active client, it will crash,
because:
* HeapprofdProducer::Restart() is executed.
* HeapprofdProducer destructor destroys its unwinding_workers_
* UnwindingWorker destroys its members. In order:
* thread_task_runner_ is destroyed, so that the thread is stopped.
* (If there's one connected client) client_data_ is destroyed.
* ClientData includes a UnixSocket, which calls PostTask on
thread_task_runner_.
* thread_task_runner_ was destroyed earlier.
This patch makes fixes the problem by destroying client_data_ (on
thread_task_runner_) before destroying the thread_task_runner_ itself.
(this is a cherry-pick of just the test part of ag/20347035 since the
actual fix landed through a merge from tm-dev)
Bug: 233338564
Bug: 155759761
Change-Id: Id1874abbff8f7a7b702542a943a8de3f3a52277a
Merged-In: Id1874abbff8f7a7b702542a943a8de3f3a52277a
diff --git a/Android.bp b/Android.bp
index 3886500..6ce03ca 100644
--- a/Android.bp
+++ b/Android.bp
@@ -8688,6 +8688,7 @@
name: "perfetto_src_profiling_memory_end_to_end_tests",
srcs: [
"src/profiling/memory/heapprofd_end_to_end_test.cc",
+ "src/profiling/memory/heapprofd_producer_integrationtest.cc",
],
}