--- trunk/reactos/ntoskrnl/ke/i386/irq.c 2005-07-17 18:34:23 UTC (rev 16626)
+++ trunk/reactos/ntoskrnl/ke/i386/irq.c 2005-07-17 18:36:01 UTC (rev 16627)
@@ -306,12 +306,12 @@
*/
Ke386DisableInterrupts();
- HalEndSystemInterrupt (old_level, 0);
-
if (old_level==PASSIVE_LEVEL && Trapframe->Cs != KERNEL_CS)
{
+ HalEndSystemInterrupt (APC_LEVEL, 0);
+
CurrentThread = KeGetCurrentThread();
- if (CurrentThread!=NULL && CurrentThread->Alerted[1])
+ if (CurrentThread!=NULL && CurrentThread->ApcState.UserApcPending)
{
DPRINT("PID: %d, TID: %d CS %04x/%04x\n",
((PETHREAD)CurrentThread)->ThreadsProcess->UniqueProcessId,
@@ -325,8 +325,8 @@
CurrentThread->TrapFrame = &KernelTrapFrame;
}
- Ke386EnableInterrupts();
- KiDeliverApc(KernelMode, NULL, NULL);
+ Ke386EnableInterrupts();
+ KiDeliverApc(UserMode, NULL, NULL);
Ke386DisableInterrupts();
ASSERT(KeGetCurrentThread() == CurrentThread);
@@ -336,7 +336,13 @@
CurrentThread->TrapFrame = OldTrapFrame;
}
}
+ KeLowerIrql(PASSIVE_LEVEL);
}
+ else
+ {
+ HalEndSystemInterrupt (old_level, 0);
+ }
+
}
static VOID