mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 05:40:04 +00:00 
			
		
		
		
	Thread: remove the thread from the thread list when exiting
This commit is contained in:
		
							parent
							
								
									2ca548bbe5
								
							
						
					
					
						commit
						5728e42634
					
				
					 3 changed files with 15 additions and 3 deletions
				
			
		|  | @ -46,7 +46,7 @@ static std::vector<SharedPtr<Thread>> thread_list; | ||||||
| // Lists only ready thread ids.
 | // Lists only ready thread ids.
 | ||||||
| static Common::ThreadQueueList<Thread*, THREADPRIO_LOWEST + 1> ready_queue; | static Common::ThreadQueueList<Thread*, THREADPRIO_LOWEST + 1> ready_queue; | ||||||
| 
 | 
 | ||||||
| static Thread* current_thread; | static SharedPtr<Thread> current_thread; | ||||||
| 
 | 
 | ||||||
| // The first available thread id at startup
 | // The first available thread id at startup
 | ||||||
| static u32 next_thread_id; | static u32 next_thread_id; | ||||||
|  | @ -63,7 +63,7 @@ Thread::Thread() {} | ||||||
| Thread::~Thread() {} | Thread::~Thread() {} | ||||||
| 
 | 
 | ||||||
| Thread* GetCurrentThread() { | Thread* GetCurrentThread() { | ||||||
|     return current_thread; |     return current_thread.get(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  | @ -263,6 +263,13 @@ void WaitCurrentThread_ArbitrateAddress(VAddr wait_address) { | ||||||
|     thread->status = THREADSTATUS_WAIT_ARB; |     thread->status = THREADSTATUS_WAIT_ARB; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void ExitCurrentThread() { | ||||||
|  |     Thread* thread = GetCurrentThread(); | ||||||
|  |     thread->Stop(); | ||||||
|  |     thread_list.erase(std::remove(thread_list.begin(), thread_list.end(), thread), | ||||||
|  |                       thread_list.end()); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| /**
 | /**
 | ||||||
|  * Callback that will wake up the thread it was scheduled for |  * Callback that will wake up the thread it was scheduled for | ||||||
|  * @param thread_handle The handle of the thread that's been awoken |  * @param thread_handle The handle of the thread that's been awoken | ||||||
|  |  | ||||||
|  | @ -252,6 +252,11 @@ void WaitCurrentThread_WaitSynchronization(std::vector<SharedPtr<WaitObject>> wa | ||||||
|  */ |  */ | ||||||
| void WaitCurrentThread_ArbitrateAddress(VAddr wait_address); | void WaitCurrentThread_ArbitrateAddress(VAddr wait_address); | ||||||
| 
 | 
 | ||||||
|  | /**
 | ||||||
|  |  * Stops the current thread and removes it from the thread_list | ||||||
|  |  */ | ||||||
|  | void ExitCurrentThread(); | ||||||
|  | 
 | ||||||
| /**
 | /**
 | ||||||
|  * Initialize threading |  * Initialize threading | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
|  | @ -584,7 +584,7 @@ static ResultCode CreateThread(Handle* out_handle, s32 priority, u32 entry_point | ||||||
| static void ExitThread() { | static void ExitThread() { | ||||||
|     LOG_TRACE(Kernel_SVC, "called, pc=0x%08X", Core::g_app_core->GetPC()); |     LOG_TRACE(Kernel_SVC, "called, pc=0x%08X", Core::g_app_core->GetPC()); | ||||||
| 
 | 
 | ||||||
|     Kernel::GetCurrentThread()->Stop(); |     Kernel::ExitCurrentThread(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /// Gets the priority for the specified thread
 | /// Gets the priority for the specified thread
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue