From b4914c26fead991fb3c13833f549e0b328b8e745 Mon Sep 17 00:00:00 2001 From: apio Date: Tue, 1 Nov 2022 11:11:20 +0100 Subject: [PATCH] Kernel: Prevent deadlocks when panicking --- moon/src/panic.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/moon/src/panic.rs b/moon/src/panic.rs index 91cafe83..670af050 100644 --- a/moon/src/panic.rs +++ b/moon/src/panic.rs @@ -1,9 +1,12 @@ use core::panic::PanicInfo; -use crate::println; +use crate::try_println; +use crate::arch::io::SERIAL; +use crate::arch::cpu; #[panic_handler] fn panic(info: &PanicInfo) -> ! { - println!("Kernel {}", info); - loop {} + unsafe { SERIAL.force_unlock(); } // since we're panicking, this is not relevant anymore. + try_println!("Kernel {}", info); // we probably should succeed, unless another CPU locked the serial port just after we unlocked it but before try_println attempts to lock it. + cpu::halt(); } \ No newline at end of file