[ros-dev] Re: [ros-svn] [ion] 20554: - Fix shamefully dangerously broken Work Thread/Queue/Item implementation:

Hartmut Birr osexpert at googlemail.com
Thu Jan 5 11:58:44 CET 2006

Alex Ionescu wrote:
> Hi,
> Can you try KDBG=1 and do a "bt" please? This should show a stack trace.
> Also, is this the SMP build?
It is a smp build. I'm not able to install a build with KDBG=1. It does
always crash at the end of the second stage setup. I've created a
backtrace by adding KeRosDumpStackFrames. It is rev 20554 with a highly
modified hal and kernel during the processor/apic initialization.

- Hartmut

(./ntoskrnl/ke/wait.c:724 CPU0) KiAbortWaitThread: 818f75e8, Status:
102, 818f7690
<ntoskrnl.exe:95f9 (./ntoskrnl/ke/wait.c:725 (KiAbortWaitThread))>
<ntoskrnl.exe:955e (./ntoskrnl/ke/wait.c:701 (KiWaitTest))>
<ntoskrnl.exe:841e (./ntoskrnl/ke/timer.c:307 (KiHandleExpiredTimer))>
<ntoskrnl.exe:83d1 (./ntoskrnl/ke/timer.c:273 (KiExpireTimers))>
<ntoskrnl.exe:334f (./ntoskrnl/ke/dpc.c:554 (KiDispatchInterrupt))>
<80507204> hal/halx86/mp/mpsirql.c:93, HalpLowerIrql
<8050767D> hal/halx86/mp/mpsirql.c:337, HalEndSystemInterrupt
<80504419> hal/halx86/mp/apic.c:820, MpsTimerHandler
<80506F6F> hal\halx86\mp\mps.S:85, MpsTimerInterrupt
<ntoskrnl.exe:8d93f (./ntoskrnl/ps/thread.c:90 (PspSystemThreadStartup))>
Assertion (Thread->State == Waiting) == (Thread->WaitBlockList != NULL)
failed at ./ntoskrnl/ke/wait.c:727 for CPU0
KeBugCheckWithTf at ntoskrnl\ke\i386\exp.c:1242

M:\Sandbox\ros_work\reactos>svn diff ntoskrnl\ke\wait.c
Index: ntoskrnl/ke/wait.c
--- ntoskrnl/ke/wait.c  (Revision 20554)
+++ ntoskrnl/ke/wait.c  (Arbeitskopie)
@@ -719,6 +719,11 @@

     /* If we are blocked, we must be waiting on something also */
     DPRINT("KiAbortWaitThread: %x, Status: %x, %x \n", Thread,
WaitStatus, Thread->WaitBlockList);
+    if (!((Thread->State == Waiting) == (Thread->WaitBlockList != NULL)))
+    {
+       DPRINT1("KiAbortWaitThread: %x, Status: %x, %x \n", Thread,
WaitStatus, Thread->WaitBlockList);
+       KeRosDumpStackFrames(NULL, 10);
+    }
     ASSERT((Thread->State == Waiting) == (Thread->WaitBlockList != NULL));

     /* Remove the Wait Blocks from the list */

More information about the Ros-dev mailing list