From baf25b44affade4f5c82b5679f505b046ef012e0 Mon Sep 17 00:00:00 2001 From: Piotr Sikora Date: Thu, 26 Jun 2025 12:26:05 -0400 Subject: [PATCH] Avoid recursion in panic! macro. Based on a patch by Alejandro Martinez Ruiz. Signed-off-by: Piotr Sikora --- src/hostcalls.rs | 6 ++++++ src/logger.rs | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/hostcalls.rs b/src/hostcalls.rs index 76c3513d..a07fde81 100644 --- a/src/hostcalls.rs +++ b/src/hostcalls.rs @@ -21,6 +21,12 @@ extern "C" { fn proxy_log(level: LogLevel, message_data: *const u8, message_size: usize) -> Status; } +pub(crate) fn log_noresult(level: LogLevel, message: &str) { + unsafe { + let _ = proxy_log(level, message.as_ptr(), message.len()); + } +} + pub fn log(level: LogLevel, message: &str) -> Result<(), Status> { unsafe { match proxy_log(level, message.as_ptr(), message.len()) { diff --git a/src/logger.rs b/src/logger.rs index 050a356d..3ea8b3a8 100644 --- a/src/logger.rs +++ b/src/logger.rs @@ -26,7 +26,7 @@ pub(crate) fn set_log_level(level: LogLevel) { if !INITIALIZED.load(Ordering::Relaxed) { log::set_logger(&LOGGER).unwrap(); panic::set_hook(Box::new(|panic_info| { - hostcalls::log(LogLevel::Critical, &panic_info.to_string()).unwrap(); + hostcalls::log_noresult(LogLevel::Critical, &panic_info.to_string()); })); INITIALIZED.store(true, Ordering::Relaxed); }