Sfoglia il codice sorgente

kernel/thread: Move thread exiting logic from ExitCurrentThread to svcExitThread

Puts the operation on global state in the same places as the rest of the
svc calls.
Lioncash 7 anni fa
parent
commit
51d7f6bffc
2 ha cambiato i file con 7 aggiunte e 8 eliminazioni
  1. 7 3
      src/core/hle/kernel/svc.cpp
  2. 0 5
      src/core/hle/kernel/thread.h

+ 7 - 3
src/core/hle/kernel/svc.cpp

@@ -1284,10 +1284,14 @@ static ResultCode StartThread(Handle thread_handle) {
 
 
 /// Called when a thread exits
 /// Called when a thread exits
 static void ExitThread() {
 static void ExitThread() {
-    LOG_TRACE(Kernel_SVC, "called, pc=0x{:08X}", Core::CurrentArmInterface().GetPC());
+    auto& system = Core::System::GetInstance();
 
 
-    ExitCurrentThread();
-    Core::System::GetInstance().PrepareReschedule();
+    LOG_TRACE(Kernel_SVC, "called, pc=0x{:08X}", system.CurrentArmInterface().GetPC());
+
+    auto* const current_thread = system.CurrentScheduler().GetCurrentThread();
+    current_thread->Stop();
+    system.CurrentScheduler().RemoveThread(current_thread);
+    system.PrepareReschedule();
 }
 }
 
 
 /// Sleep the current thread
 /// Sleep the current thread

+ 0 - 5
src/core/hle/kernel/thread.h

@@ -463,9 +463,4 @@ private:
  */
  */
 Thread* GetCurrentThread();
 Thread* GetCurrentThread();
 
 
-/**
- * Stops the current thread and removes it from the thread_list
- */
-void ExitCurrentThread();
-
 } // namespace Kernel
 } // namespace Kernel