[NTOS:KE]
authorThomas Faber <thomas.faber@reactos.org>
Sun, 30 Mar 2014 21:10:04 +0000 (21:10 +0000)
committerThomas Faber <thomas.faber@reactos.org>
Sun, 30 Mar 2014 21:10:04 +0000 (21:10 +0000)
- Verify valid IRQL in KeDelayExecutionThread, just like in KeWait*
- Return from KeDelayExecutionThread after yielding execution

svn path=/trunk/; revision=62590

reactos/ntoskrnl/ke/wait.c

index 2a24c00..c7bfa3e 100644 (file)
@@ -285,6 +285,11 @@ KeDelayExecutionThread(IN KPROCESSOR_MODE WaitMode,
     LARGE_INTEGER DueTime, NewDueTime, InterruptTime;
     ULONG Hand = 0;
 
+    if (Thread->WaitNext)
+        ASSERT(KeGetCurrentIrql() == DISPATCH_LEVEL);
+    else
+        ASSERT(KeGetCurrentIrql() <= APC_LEVEL);
+
     /* If this is a user-mode wait of 0 seconds, yield execution */
     if (!(Interval->QuadPart) && (WaitMode != KernelMode))
     {
@@ -292,7 +297,7 @@ KeDelayExecutionThread(IN KPROCESSOR_MODE WaitMode,
         if (!(Alertable) && !(Thread->ApcState.UserApcPending))
         {
             /* Yield execution */
-            NtYieldExecution();
+            return NtYieldExecution();
         }
     }