Reactos

[NTOS:KE] Fix some locking issues

+10
+2
ntoskrnl/include/internal/ke_x.h
··· 1347 1347 // This routine must be entered with the PRCB lock held and it will exit 1348 1348 // with the PRCB lock released! 1349 1349 // 1350 + _Requires_lock_held_(Prcb->PrcbLock) 1351 + _Releases_lock_(Prcb->PrcbLock) 1350 1352 FORCEINLINE 1351 1353 VOID 1352 1354 KxQueueReadyThread(IN PKTHREAD Thread,
+4
ntoskrnl/ke/amd64/stubs.c
··· 26 26 KiConvertToGuiThread( 27 27 VOID); 28 28 29 + _Requires_lock_not_held_(Prcb->PrcbLock) 29 30 VOID 30 31 NTAPI 31 32 KiDpcInterruptHandler(VOID) ··· 61 62 } 62 63 else if (Prcb->NextThread) 63 64 { 65 + /* Acquire the PRCB lock */ 66 + KiAcquirePrcbLock(Prcb); 67 + 64 68 /* Capture current thread data */ 65 69 OldThread = Prcb->CurrentThread; 66 70 NewThread = Prcb->NextThread;
+1
ntoskrnl/ke/dpc.c
··· 460 460 } 461 461 } 462 462 463 + _Requires_lock_not_held_(Prcb->PrcbLock) 463 464 VOID 464 465 NTAPI 465 466 KiQuantumEnd(VOID)
+3
ntoskrnl/ke/procobj.c
··· 367 367 /* Lock the process */ 368 368 KiAcquireProcessLockRaiseToSynch(Process, &ProcessLock); 369 369 370 + /* Acquire the dispatcher lock */ 371 + KiAcquireDispatcherLockAtSynchLevel(); 372 + 370 373 /* Check if we are modifying the quantum too */ 371 374 if (Quantum) Process->QuantumReset = Quantum; 372 375