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

Scheduler: Correct locking for hle threads.

Fernando Sahmkow 6 лет назад
Родитель
Сommit
44cb9997b3
1 измененных файлов с 2 добавлено и 1 удалено
  1. 2 1
      src/core/hle/kernel/scheduler.cpp

+ 2 - 1
src/core/hle/kernel/scheduler.cpp

@@ -687,9 +687,10 @@ void Scheduler::SwitchToCurrent() {
         guard.lock();
         guard.lock();
         selected_thread = selected_thread_set;
         selected_thread = selected_thread_set;
         current_thread = selected_thread;
         current_thread = selected_thread;
+        is_context_switch_pending = false;
         guard.unlock();
         guard.unlock();
         while (!is_context_switch_pending) {
         while (!is_context_switch_pending) {
-            if (current_thread != nullptr) {
+            if (current_thread != nullptr && !current_thread->IsHLEThread()) {
                 current_thread->context_guard.lock();
                 current_thread->context_guard.lock();
                 if (current_thread->GetSchedulingStatus() != ThreadSchedStatus::Runnable) {
                 if (current_thread->GetSchedulingStatus() != ThreadSchedStatus::Runnable) {
                     current_thread->context_guard.unlock();
                     current_thread->context_guard.unlock();