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 {