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.
 | 
					// 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…
	
		Reference in New Issue
	
	Block a user