[NTOS:KE]

- Make sure to disable interrupts each iteration of the idle loop, since IdleFunction can leave them enabled.
CORE-12985 #resolve

svn path=/trunk/; revision=74235
This commit is contained in:
Thomas Faber 2017-03-27 20:16:59 +00:00
parent 73696326a3
commit 10236225d3

View file

@ -270,15 +270,15 @@ KiIdleLoop(VOID)
PKPRCB Prcb = KeGetCurrentPrcb(); PKPRCB Prcb = KeGetCurrentPrcb();
PKTHREAD OldThread, NewThread; PKTHREAD OldThread, NewThread;
/* Initialize the idle loop: disable interrupts */
_enable();
YieldProcessor();
YieldProcessor();
_disable();
/* Now loop forever */ /* Now loop forever */
while (TRUE) while (TRUE)
{ {
/* Start of the idle loop: disable interrupts */
_enable();
YieldProcessor();
YieldProcessor();
_disable();
/* Check for pending timers, pending DPCs, or pending ready threads */ /* Check for pending timers, pending DPCs, or pending ready threads */
if ((Prcb->DpcData[0].DpcQueueDepth) || if ((Prcb->DpcData[0].DpcQueueDepth) ||
(Prcb->TimerRequest) || (Prcb->TimerRequest) ||
@ -310,12 +310,6 @@ KiIdleLoop(VOID)
/* Switch away from the idle thread */ /* Switch away from the idle thread */
KiSwapContext(APC_LEVEL, OldThread); KiSwapContext(APC_LEVEL, OldThread);
/* We are back in the idle thread -- disable interrupts again */
_enable();
YieldProcessor();
YieldProcessor();
_disable();
} }
else else
{ {