Protect debug print output with spinlock
All checks were successful
All checks were successful
This commit is contained in:
@@ -21,6 +21,7 @@ namespace KD
|
|||||||
STATIC PKD_PRINT_ROUTINE KdPrint;
|
STATIC PKD_PRINT_ROUTINE KdPrint;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
STATIC KSPIN_LOCK DebugIoLock;
|
||||||
STATIC KD_DEBUG_MODE DebugMode;
|
STATIC KD_DEBUG_MODE DebugMode;
|
||||||
STATIC PKD_INIT_ROUTINE IoProvidersInitRoutines[KDBG_PROVIDERS_COUNT];
|
STATIC PKD_INIT_ROUTINE IoProvidersInitRoutines[KDBG_PROVIDERS_COUNT];
|
||||||
STATIC LIST_ENTRY Providers;
|
STATIC LIST_ENTRY Providers;
|
||||||
@@ -30,7 +31,7 @@ namespace KD
|
|||||||
public:
|
public:
|
||||||
STATIC XTCDECL VOID DbgPrint(PCWSTR Format,
|
STATIC XTCDECL VOID DbgPrint(PCWSTR Format,
|
||||||
...);
|
...);
|
||||||
STATIC XTCDECL VOID DbgPrintEx(PCWSTR Format,
|
STATIC XTCDECL VOID DbgPrint(PCWSTR Format,
|
||||||
VA_LIST Arguments);
|
VA_LIST Arguments);
|
||||||
STATIC XTAPI XTSTATUS InitializeDebugIoProviders(VOID);
|
STATIC XTAPI XTSTATUS InitializeDebugIoProviders(VOID);
|
||||||
STATIC XTAPI VOID SetPrintRoutine(PKD_PRINT_ROUTINE DebugPrintRoutine);
|
STATIC XTAPI VOID SetPrintRoutine(PKD_PRINT_ROUTINE DebugPrintRoutine);
|
||||||
|
|||||||
@@ -9,6 +9,9 @@
|
|||||||
#include <xtos.hh>
|
#include <xtos.hh>
|
||||||
|
|
||||||
|
|
||||||
|
/* Debug I/O spinlock */
|
||||||
|
KSPIN_LOCK KD::DebugIo::DebugIoLock;
|
||||||
|
|
||||||
/* Kernel Debugger mode */
|
/* Kernel Debugger mode */
|
||||||
KD_DEBUG_MODE KD::DebugIo::DebugMode;
|
KD_DEBUG_MODE KD::DebugIo::DebugMode;
|
||||||
|
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ KD::DebugIo::DbgPrint(PCWSTR Format,
|
|||||||
VA_START(Arguments, Format);
|
VA_START(Arguments, Format);
|
||||||
|
|
||||||
/* Call the actual debug print routine */
|
/* Call the actual debug print routine */
|
||||||
DbgPrintEx(Format, Arguments);
|
DbgPrint(Format, Arguments);
|
||||||
|
|
||||||
/* Clean up the va_list */
|
/* Clean up the va_list */
|
||||||
VA_END(Arguments);
|
VA_END(Arguments);
|
||||||
@@ -54,12 +54,16 @@ KD::DebugIo::DbgPrint(PCWSTR Format,
|
|||||||
*/
|
*/
|
||||||
XTCDECL
|
XTCDECL
|
||||||
VOID
|
VOID
|
||||||
KD::DebugIo::DbgPrintEx(PCWSTR Format,
|
KD::DebugIo::DbgPrint(PCWSTR Format,
|
||||||
VA_LIST Arguments)
|
VA_LIST Arguments)
|
||||||
{
|
{
|
||||||
PLIST_ENTRY DispatchTableEntry;
|
PLIST_ENTRY DispatchTableEntry;
|
||||||
PKD_DISPATCH_TABLE DispatchTable;
|
PKD_DISPATCH_TABLE DispatchTable;
|
||||||
|
|
||||||
|
/* Raise runlevel and acquire the Debug I/O lock */
|
||||||
|
KE::RaiseRunLevel RunLevel(HIGH_LEVEL);
|
||||||
|
KE::SpinLockGuard SpinLock(&DebugIoLock);
|
||||||
|
|
||||||
/* Iterate over all registered debug providers */
|
/* Iterate over all registered debug providers */
|
||||||
DispatchTableEntry = Providers.Flink;
|
DispatchTableEntry = Providers.Flink;
|
||||||
while(DispatchTableEntry != &Providers)
|
while(DispatchTableEntry != &Providers)
|
||||||
@@ -218,6 +222,9 @@ KD::DebugIo::InitializeDebugIoProviders(VOID)
|
|||||||
ULONG Index;
|
ULONG Index;
|
||||||
XTSTATUS ProviderStatus, Status;
|
XTSTATUS ProviderStatus, Status;
|
||||||
|
|
||||||
|
/* Initialize debug I/O spinlock */
|
||||||
|
KE::SpinLock::InitializeSpinLock(&DebugIoLock);
|
||||||
|
|
||||||
/* Initialize debug providers list */
|
/* Initialize debug providers list */
|
||||||
RTL::LinkedList::InitializeListHead(&Providers);
|
RTL::LinkedList::InitializeListHead(&Providers);
|
||||||
|
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ DbgPrint(PCWSTR Format,
|
|||||||
/* Initialise the va_list */
|
/* Initialise the va_list */
|
||||||
VA_START(Arguments, Format);
|
VA_START(Arguments, Format);
|
||||||
|
|
||||||
KD::DebugIo::DbgPrintEx(Format, Arguments);
|
KD::DebugIo::DbgPrint(Format, Arguments);
|
||||||
|
|
||||||
/* Clean up the va_list */
|
/* Clean up the va_list */
|
||||||
VA_END(Arguments);
|
VA_END(Arguments);
|
||||||
|
|||||||
Reference in New Issue
Block a user