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
Perfetto is a production-grade open-source stack for performance instrumentation and trace analysis. It offers services and libraries and for recording system-level and app-level traces, native + java heap profiling, a library for analyzing traces using SQL and a web-based UI to visualize and explore multi-GB traces.
See https://perfetto.dev/docs or the /docs/ directory for documentation.