- 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