Create a new print function and use it in the print macro

This fixes the deadlock problem, because the format_args is now evaluated before locking the screen writer. So `println!("{:?}", {println!("");})` no longer triggers a deadlock.

(cherry picked from commit d96df500a7)
This commit is contained in:
Philipp Oppermann
2016-10-26 09:06:57 +02:00
parent e09df45b9b
commit e8d1f96b76

View File

@@ -28,11 +28,15 @@ macro_rules! println {
macro_rules! print { macro_rules! print {
($($arg:tt)*) => ({ ($($arg:tt)*) => ({
use core::fmt::Write; $crate::vga_buffer::print(format_args!($($arg)*));
$crate::vga_buffer::WRITER.lock().write_fmt(format_args!($($arg)*)).unwrap();
}); });
} }
pub fn print(args: fmt::Arguments) {
use core::fmt::Write;
WRITER.lock().write_fmt(args).unwrap();
}
pub fn clear_screen() { pub fn clear_screen() {
for _ in 0..BUFFER_HEIGHT { for _ in 0..BUFFER_HEIGHT {
println!(""); println!("");