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