فهرست منبع

kernel: signal thread on termination completed

Liam 2 سال پیش
والد
کامیت
dcfe674ed4
1فایلهای تغییر یافته به همراه7 افزوده شده و 4 حذف شده
  1. 7 4
      src/core/hle/kernel/k_thread.cpp

+ 7 - 4
src/core/hle/kernel/k_thread.cpp

@@ -415,10 +415,6 @@ void KThread::StartTermination() {
         m_parent->ClearRunningThread(this);
     }
 
-    // Signal.
-    m_signaled = true;
-    KSynchronizationObject::NotifyAvailable();
-
     // Clear previous thread in KScheduler.
     KScheduler::ClearPreviousThread(m_kernel, this);
 
@@ -437,6 +433,13 @@ void KThread::FinishTermination() {
         }
     }
 
+    // Acquire the scheduler lock.
+    KScopedSchedulerLock sl{m_kernel};
+
+    // Signal.
+    m_signaled = true;
+    KSynchronizationObject::NotifyAvailable();
+
     // Close the thread.
     this->Close();
 }