commit | f56345bcd10e20c4d0735486368cbc157b4e05ca | [log] [tgz] |
---|---|---|
author | Daniele Di Proietto <ddiproietto@google.com> | Wed Nov 02 10:16:11 2022 +0000 |
committer | Lalit Maganti <lalitm@google.com> | Wed Mar 29 15:03:56 2023 +0100 |
tree | 71384e2f54d7f3e53cbb6bb4736c60cbbf923675 | |
parent | ad418a3f70f33f6b50cd008b565360ef95446063 [diff] |
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.