mirror of
https://github.com/phil-opp/blog_os.git
synced 2025-12-16 22:37:49 +00:00
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.
This commit is contained in:
@@ -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!("");
|
||||||
|
|||||||
Reference in New Issue
Block a user