- 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