mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu-mainline.git
				synced 2025-03-21 01:53:15 +00:00 
			
		
		
		
	Thread: remove the thread from the thread list when exiting
This commit is contained in:
		
							parent
							
								
									2ca548bbe5
								
							
						
					
					
						commit
						5728e42634
					
				@ -46,7 +46,7 @@ static std::vector<SharedPtr<Thread>> thread_list;
 | 
			
		||||
// Lists only ready thread ids.
 | 
			
		||||
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
 | 
			
		||||
static u32 next_thread_id;
 | 
			
		||||
@ -63,7 +63,7 @@ Thread::Thread() {}
 | 
			
		||||
Thread::~Thread() {}
 | 
			
		||||
 | 
			
		||||
Thread* GetCurrentThread() {
 | 
			
		||||
    return current_thread;
 | 
			
		||||
    return current_thread.get();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -263,6 +263,13 @@ void WaitCurrentThread_ArbitrateAddress(VAddr wait_address) {
 | 
			
		||||
    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
 | 
			
		||||
 * @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);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Stops the current thread and removes it from the thread_list
 | 
			
		||||
 */
 | 
			
		||||
void ExitCurrentThread();
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Initialize threading
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
@ -584,7 +584,7 @@ static ResultCode CreateThread(Handle* out_handle, s32 priority, u32 entry_point
 | 
			
		||||
static void ExitThread() {
 | 
			
		||||
    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
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user