Просмотр исходного кода

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 лет назад
Родитель
Сommit
51d7f6bffc
2 измененных файлов с 7 добавлено и 8 удалено
  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
 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

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

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