Browse Source

kernel: be more careful about initialization path for HLE threads

Liam 4 years ago
parent
commit
77137583cd
2 changed files with 8 additions and 1 deletions
  1. 1 0
      src/core/hle/kernel/k_scheduler.cpp
  2. 7 1
      src/core/hle/kernel/k_thread.cpp

+ 1 - 0
src/core/hle/kernel/k_scheduler.cpp

@@ -70,6 +70,7 @@ void KScheduler::EnableScheduling(KernelCore& kernel, u64 cores_needing_scheduli
             GetCurrentThread(kernel).IfDummyThreadTryWait();
             GetCurrentThread(kernel).IfDummyThreadTryWait();
         }
         }
         GetCurrentThread(kernel).EnableDispatch();
         GetCurrentThread(kernel).EnableDispatch();
+        ASSERT(GetCurrentThread(kernel).GetState() != ThreadState::Waiting);
         return;
         return;
     }
     }
 
 

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

@@ -258,7 +258,13 @@ Result KThread::InitializeThread(KThread* thread, KThreadFunction func, uintptr_
 }
 }
 
 
 Result KThread::InitializeDummyThread(KThread* thread) {
 Result KThread::InitializeDummyThread(KThread* thread) {
-    return thread->Initialize({}, {}, {}, DummyThreadPriority, 3, {}, ThreadType::Dummy);
+    // Initialize the thread.
+    R_TRY(thread->Initialize({}, {}, {}, DummyThreadPriority, 3, {}, ThreadType::Dummy));
+
+    // Initialize emulation parameters.
+    thread->stack_parameters.disable_count = 0;
+
+    return ResultSuccess;
 }
 }
 
 
 Result KThread::InitializeMainThread(Core::System& system, KThread* thread, s32 virt_core) {
 Result KThread::InitializeMainThread(Core::System& system, KThread* thread, s32 virt_core) {