diff --git a/tools/debugging/logmonitor/src/backend/mod.rs b/tools/debugging/logmonitor/src/backend/mod.rs index fb4609b5..928f9ea8 100644 --- a/tools/debugging/logmonitor/src/backend/mod.rs +++ b/tools/debugging/logmonitor/src/backend/mod.rs @@ -53,7 +53,7 @@ impl AppBackend { } #[derive(Debug)] -struct BackendData { +pub(crate) struct BackendData { kernel_metadata: Option, /// Path to the QEMU shm which contains the kernel memory. kmem_path: Option, diff --git a/tools/debugging/logmonitor/src/backend/monitor/mm.rs b/tools/debugging/logmonitor/src/backend/monitor/mm.rs index 48e7cad8..7da9b893 100644 --- a/tools/debugging/logmonitor/src/backend/monitor/mm.rs +++ b/tools/debugging/logmonitor/src/backend/monitor/mm.rs @@ -30,7 +30,7 @@ pub struct MMLogMonitor { } impl MMLogMonitor { - pub fn new(shared_data: Arc>) -> Arc { + pub(crate) fn new(shared_data: Arc>) -> Arc { let guard = shared_data.lock().unwrap(); let mm_log_buffer_symbol: Option = guard .kernel_metadata @@ -153,7 +153,20 @@ impl MMMonitorThread { pub fn run(&mut self) { info!("MMMonitorThread::run(): kmem_path: {:?}", self.kmem_path); - let mut kmem_file = self.open_kmem_file().expect("Failed to open kmem file."); + let mut kmem_file = { + let mut file: File; + loop { + let f = self.open_kmem_file(); + if f.is_ok() { + file = f.unwrap(); + break; + } else { + log::error!("Failed to open kmem file, error: {:?}", f.unwrap_err()); + std::thread::sleep(std::time::Duration::from_secs(1)); + } + } + file + }; info!("Channel header loaded!");