1 use super::Handle;
2 
3 use crate::runtime::Dump;
4 
5 impl Handle {
dump(&self) -> Dump6     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 }
27