mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu-mainline.git
				synced 2025-03-21 01:53:15 +00:00 
			
		
		
		
	Kernel: Corrections to Wait Objects clearing in which a thread could still be signalled after a timeout or a cancel.
This commit is contained in:
		
							parent
							
								
									27d571c084
								
							
						
					
					
						commit
						1c6a11ab14
					
				| @ -133,6 +133,7 @@ void Thread::ResumeFromWait() { | ||||
| 
 | ||||
| void Thread::CancelWait() { | ||||
|     ASSERT(GetStatus() == ThreadStatus::WaitSynch); | ||||
|     ClearWaitObjects(); | ||||
|     SetWaitSynchronizationResult(ERR_SYNCHRONIZATION_CANCELED); | ||||
|     ResumeFromWait(); | ||||
| } | ||||
|  | ||||
| @ -319,6 +319,9 @@ public: | ||||
|     } | ||||
| 
 | ||||
|     void ClearWaitObjects() { | ||||
|         for (const auto& waiting_object : wait_objects) { | ||||
|             waiting_object->RemoveWaitingThread(this); | ||||
|         } | ||||
|         wait_objects.clear(); | ||||
|     } | ||||
| 
 | ||||
|  | ||||
| @ -85,9 +85,6 @@ void WaitObject::WakeupWaitingThread(SharedPtr<Thread> thread) { | ||||
| 
 | ||||
|     const std::size_t index = thread->GetWaitObjectIndex(this); | ||||
| 
 | ||||
|     for (const auto& object : thread->GetWaitObjects()) { | ||||
|         object->RemoveWaitingThread(thread.get()); | ||||
|     } | ||||
|     thread->ClearWaitObjects(); | ||||
| 
 | ||||
|     thread->CancelWakeupTimer(); | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Fernando Sahmkow
						Fernando Sahmkow