Author: tfaber
Date: Mon Mar 27 20:16:59 2017
New Revision: 74235
URL:
http://svn.reactos.org/svn/reactos?rev=74235&view=rev
Log:
[NTOS:KE]
- Make sure to disable interrupts each iteration of the idle loop, since IdleFunction can
leave them enabled.
CORE-12985 #resolve
Modified:
trunk/reactos/ntoskrnl/ke/i386/thrdini.c
Modified: trunk/reactos/ntoskrnl/ke/i386/thrdini.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ke/i386/thrdini.c…
==============================================================================
--- trunk/reactos/ntoskrnl/ke/i386/thrdini.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/ke/i386/thrdini.c [iso-8859-1] Mon Mar 27 20:16:59 2017
@@ -270,15 +270,15 @@
PKPRCB Prcb = KeGetCurrentPrcb();
PKTHREAD OldThread, NewThread;
- /* Initialize the idle loop: disable interrupts */
- _enable();
- YieldProcessor();
- YieldProcessor();
- _disable();
-
/* Now loop forever */
while (TRUE)
{
+ /* Start of the idle loop: disable interrupts */
+ _enable();
+ YieldProcessor();
+ YieldProcessor();
+ _disable();
+
/* Check for pending timers, pending DPCs, or pending ready threads */
if ((Prcb->DpcData[0].DpcQueueDepth) ||
(Prcb->TimerRequest) ||
@@ -310,12 +310,6 @@
/* Switch away from the idle thread */
KiSwapContext(APC_LEVEL, OldThread);
-
- /* We are back in the idle thread -- disable interrupts again */
- _enable();
- YieldProcessor();
- YieldProcessor();
- _disable();
}
else
{