tokio/runtime/scheduler/multi_thread/handle/
taskdump.rs

1use super::Handle;
2
3use crate::runtime::Dump;
4
5impl Handle {
6    pub(crate) async fn dump(&self) -> Dump {
7        let trace_status = &self.shared.trace_status;
8
9        // If a dump is in progress, block.
10        trace_status.start_trace_request(&self).await;
11
12        let result = loop {
13            if let Some(result) = trace_status.take_result() {
14                break result;
15            } else {
16                self.notify_all();
17                trace_status.result_ready.notified().await;
18            }
19        };
20
21        // Allow other queued dumps to proceed.
22        trace_status.end_trace_request(&self).await;
23
24        result
25    }
26}