From 173d0b2fc795efd1d6de9d74ff25f8ff1d9522c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Tue, 9 Oct 2007 00:12:29 +0000 Subject: [PATCH] panic() could hang in the early boot process in case it was called before the blue screen was initialized - blue_screen_enter() now returns wether or not it has been initialized already (there will only be serial output in that case). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22491 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/system/kernel/debug/blue_screen.cpp | 8 ++++++-- src/system/kernel/debug/blue_screen.h | 4 ++-- src/system/kernel/debug/debug.c | 4 ++-- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/system/kernel/debug/blue_screen.cpp b/src/system/kernel/debug/blue_screen.cpp index 5f10ccd06a..bf263ecf5b 100644 --- a/src/system/kernel/debug/blue_screen.cpp +++ b/src/system/kernel/debug/blue_screen.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2005-2006, Axel Dörfler, axeld@pinc-software.de. All rights reserved. + * Copyright 2005-2007, Axel Dörfler, axeld@pinc-software.de. All rights reserved. * Distributed under the terms of the MIT License. */ @@ -486,7 +486,7 @@ blue_screen_init(void) } -void +status_t blue_screen_enter(bool debugOutput) { sScreen.attr = debugOutput ? 0xf0 : 0x0f; @@ -494,12 +494,16 @@ blue_screen_enter(bool debugOutput) sScreen.x = sScreen.y = 0; sScreen.state = CONSOLE_STATE_NORMAL; + if (sModule == NULL) + return B_NO_INIT; + sModule->get_size(&sScreen.columns, &sScreen.rows); #if !NO_CLEAR sModule->clear(sScreen.attr); #else sModule->fill_glyph(0, sScreen.y, sScreen.columns, 3, ' ', sScreen.attr); #endif + return B_OK; } diff --git a/src/system/kernel/debug/blue_screen.h b/src/system/kernel/debug/blue_screen.h index c0bc906996..ca713ac335 100644 --- a/src/system/kernel/debug/blue_screen.h +++ b/src/system/kernel/debug/blue_screen.h @@ -1,5 +1,5 @@ /* - * Copyright 2005-2006, Axel Dörfler, axeld@pinc-software.de. All rights reserved. + * Copyright 2005-2007, Axel Dörfler, axeld@pinc-software.de. All rights reserved. * Distributed under the terms of the MIT License. */ #ifndef BLUE_SCREEN_H @@ -14,7 +14,7 @@ extern "C" { #endif status_t blue_screen_init(void); -void blue_screen_enter(bool debugOutput); +status_t blue_screen_enter(bool debugOutput); char blue_screen_getchar(void); void blue_screen_putchar(char c); diff --git a/src/system/kernel/debug/debug.c b/src/system/kernel/debug/debug.c index 4fa622bb81..2bc20ed728 100644 --- a/src/system/kernel/debug/debug.c +++ b/src/system/kernel/debug/debug.c @@ -893,8 +893,8 @@ kernel_debugger(const char *message) } if (sBlueScreenOutput) { - sBlueScreenEnabled = true; - blue_screen_enter(false); + if (blue_screen_enter(false) == B_OK) + sBlueScreenEnabled = true; } if (message)