Merge pull request #2345 from wwylele/no-zombie-thread
Thread: remove the thread from the thread list when exiting
This commit is contained in:
		
						commit
						20b832cfc1
					
				| @ -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
	 bunnei
						bunnei