- Allow file debug prints to happen at IRQL > DISPATCH_LEVEL, but don't
queue a work item until we are at <= DISPATCH. Fixes /DEBUGPORT=FILE
freeze/crash/bug.
Modified: trunk/reactos/ntoskrnl/kd/kdio.c
_____
Modified: trunk/reactos/ntoskrnl/kd/kdio.c
--- trunk/reactos/ntoskrnl/kd/kdio.c 2005-07-26 14:00:45 UTC (rev
16744)
+++ trunk/reactos/ntoskrnl/kd/kdio.c 2005-07-26 15:15:18 UTC (rev
16745)
@@ -71,9 +71,17 @@
/* Make sure we are initialized and can queue */
if (!KdpLogInitialized || (ItemQueued)) return;
- /* Queue the work item */
- ExQueueWorkItem(&KdpDebugLogQueue, HyperCriticalWorkQueue);
- ItemQueued = TRUE;
+ /*
+ * Queue the work item
+ * Note that we don't want to queue if we are > DISPATCH_LEVEL...
+ * The message is in the buffer and will simply be taken care of at
+ * the next time we are at <= DISPATCH, so it won't be lost.
+ */
+ if (KeGetCurrentIrql() <= DISPATCH_LEVEL)
+ {
+ ExQueueWorkItem(&KdpDebugLogQueue, HyperCriticalWorkQueue);
+ ItemQueued = TRUE;
+ }
}
VOID
Show replies by date