forked from eden-emu/eden
		
	SCC: Small corrections to CancelSynchronization
This commit is contained in:
		
							parent
							
								
									e5454c3665
								
							
						
					
					
						commit
						c1f6b99653
					
				
					 3 changed files with 14 additions and 2 deletions
				
			
		|  | @ -74,7 +74,9 @@ std::pair<ResultCode, Handle> Synchronization::WaitFor( | ||||||
|         thread->SetSynchronizationObjects(&sync_objects); |         thread->SetSynchronizationObjects(&sync_objects); | ||||||
|         thread->SetSynchronizationResults(nullptr, RESULT_TIMEOUT); |         thread->SetSynchronizationResults(nullptr, RESULT_TIMEOUT); | ||||||
|         thread->SetStatus(ThreadStatus::WaitSynch); |         thread->SetStatus(ThreadStatus::WaitSynch); | ||||||
|  |         thread->SetWaitingSync(true); | ||||||
|     } |     } | ||||||
|  |     thread->SetWaitingSync(false); | ||||||
| 
 | 
 | ||||||
|     if (event_handle != InvalidHandle) { |     if (event_handle != InvalidHandle) { | ||||||
|         auto& time_manager = kernel.TimeManager(); |         auto& time_manager = kernel.TimeManager(); | ||||||
|  |  | ||||||
|  | @ -139,13 +139,14 @@ ResultCode Thread::Start() { | ||||||
| 
 | 
 | ||||||
| void Thread::CancelWait() { | void Thread::CancelWait() { | ||||||
|     SchedulerLock lock(kernel); |     SchedulerLock lock(kernel); | ||||||
|     if (GetSchedulingStatus() != ThreadSchedStatus::Paused) { |     if (GetSchedulingStatus() != ThreadSchedStatus::Paused || !is_waiting_on_sync) { | ||||||
|         is_sync_cancelled = true; |         is_sync_cancelled = true; | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
|  |     //TODO(Blinkhawk): Implement cancel of server session
 | ||||||
|     is_sync_cancelled = false; |     is_sync_cancelled = false; | ||||||
|     SetSynchronizationResults(nullptr, ERR_SYNCHRONIZATION_CANCELED); |     SetSynchronizationResults(nullptr, ERR_SYNCHRONIZATION_CANCELED); | ||||||
|     ResumeFromWait(); |     SetStatus(ThreadStatus::Ready); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static void ResetThreadContext32(Core::ARM_Interface::ThreadContext32& context, u32 stack_top, | static void ResetThreadContext32(Core::ARM_Interface::ThreadContext32& context, u32 stack_top, | ||||||
|  |  | ||||||
|  | @ -556,6 +556,14 @@ public: | ||||||
|         waiting_for_arbitration = set; |         waiting_for_arbitration = set; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     bool IsWaitingSync() const { | ||||||
|  |         return is_waiting_on_sync; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     void SetWaitingSync(bool is_waiting) { | ||||||
|  |         is_waiting_on_sync = is_waiting; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
| private: | private: | ||||||
|     friend class GlobalScheduler; |     friend class GlobalScheduler; | ||||||
|     friend class Scheduler; |     friend class Scheduler; | ||||||
|  | @ -650,6 +658,7 @@ private: | ||||||
| 
 | 
 | ||||||
|     u32 scheduling_state = 0; |     u32 scheduling_state = 0; | ||||||
|     bool is_running = false; |     bool is_running = false; | ||||||
|  |     bool is_waiting_on_sync = false; | ||||||
|     bool is_sync_cancelled = false; |     bool is_sync_cancelled = false; | ||||||
| 
 | 
 | ||||||
|     bool will_be_terminated{}; |     bool will_be_terminated{}; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Fernando Sahmkow
						Fernando Sahmkow