Merge branch 'master' of git://git.ucc.asn.au/tpg/acess2
[tpg/acess2.git] / KernelLand / Kernel / debug.c
index ab3dd67..1cea00c 100644 (file)
@@ -39,7 +39,10 @@ static void Debug_Putchar(char ch)
 {
        Debug_PutCharDebug(ch);
        
-       if( !gbDebug_IsKPanic )
+       if( gbDebug_IsKPanic )
+               KernelPanic_PutChar(ch);
+
+       if( gbDebug_IsKPanic < 2 )
        {
                if(gbInPutChar) return ;
                gbInPutChar = 1;
@@ -47,8 +50,6 @@ static void Debug_Putchar(char ch)
                        VFS_Write(giDebug_KTerm, 1, &ch);
                gbInPutChar = 0;
        }
-       else
-               KernelPanic_PutChar(ch);
        
        if( gbSendNetworkDebug )
        {
@@ -75,7 +76,7 @@ static void Debug_Puts(int UseKTerm, const char *Str)
                IPStack_SendDebugText(Str);
 
        // Output to the kernel terminal
-       if( UseKTerm && !gbDebug_IsKPanic && giDebug_KTerm != -1)
+       if( UseKTerm && gbDebug_IsKPanic < 2 && giDebug_KTerm != -1)
        {
                if(gbInPutChar) return ;
                gbInPutChar = 1;
@@ -114,7 +115,7 @@ void Debug_KernelPanic(void)
        #if LOCK_DEBUG_OUTPUT
        SHORTREL(&glDebug_Lock);
        #endif
-       gbDebug_IsKPanic = 1;
+       gbDebug_IsKPanic ++;
        KernelPanic_SetMode();
 }
 
@@ -149,7 +150,7 @@ void Debug(const char *Fmt, ...)
        va_list args;
        
        #if LOCK_DEBUG_OUTPUT
-       SHORTLOCK(&glDebug_Lock);
+       if(!CPU_HAS_LOCK(&glDebug_Lock)) SHORTLOCK(&glDebug_Lock);
        #endif
 
        Debug_Puts(0, "Debug: ");
@@ -162,27 +163,47 @@ void Debug(const char *Fmt, ...)
        SHORTREL(&glDebug_Lock);
        #endif
 }
-/**
- * \fn void Log(const char *Msg, ...)
- */
-void Log(const char *Fmt, ...)
+
+
+void LogFV(const char *Fmt, va_list args)
 {
-       va_list args;
+       #if LOCK_DEBUG_OUTPUT
+       SHORTLOCK(&glDebug_Lock);
+       #endif
+
+       Debug_Fmt(1, Fmt, args);
        
+       #if LOCK_DEBUG_OUTPUT
+       SHORTREL(&glDebug_Lock);
+       #endif
+}
+
+void LogV(const char *Fmt, va_list args)
+{
        #if LOCK_DEBUG_OUTPUT
        SHORTLOCK(&glDebug_Lock);
        #endif
 
        Debug_Puts(1, "Log: ");
-       va_start(args, Fmt);
        Debug_Fmt(1, Fmt, args);
-       va_end(args);
        Debug_Puts(1, "\r\n");
        
        #if LOCK_DEBUG_OUTPUT
        SHORTREL(&glDebug_Lock);
        #endif
 }
+
+/**
+ * \fn void Log(const char *Msg, ...)
+ */
+void Log(const char *Fmt, ...)
+{
+       va_list args;
+       va_start(args, Fmt);
+       LogV(Fmt, args);
+       va_end(args);
+}
+
 void Warning(const char *Fmt, ...)
 {
        va_list args;
@@ -207,7 +228,8 @@ void Panic(const char *Fmt, ...)
        va_list args;
        
        #if LOCK_DEBUG_OUTPUT
-       SHORTLOCK(&glDebug_Lock);
+       if( !CPU_HAS_LOCK(&glDebug_Lock) )
+               SHORTLOCK(&glDebug_Lock);
        #endif
        // And never SHORTREL
        

UCC git Repository :: git.ucc.asn.au