diff options
| author | bunnei <bunneidev@gmail.com> | 2021-08-06 23:04:32 -0700 |
|---|---|---|
| committer | bunnei <bunneidev@gmail.com> | 2021-08-07 12:18:47 -0700 |
| commit | 01af2f4162308029e53143f0caa953bc4c59de92 (patch) | |
| tree | 44915af7833f785238411725bbc3947b31200ab8 /src/core/hle/kernel/k_thread.cpp | |
| parent | 2b9560428b6ab84fc61dd8f82e75f58cdb851c07 (diff) | |
core: hle: kernel: k_thread: Add KScopedDisableDispatch.
Diffstat (limited to 'src/core/hle/kernel/k_thread.cpp')
| -rw-r--r-- | src/core/hle/kernel/k_thread.cpp | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/src/core/hle/kernel/k_thread.cpp b/src/core/hle/kernel/k_thread.cpp index 9f1d3156b..89653e0cb 100644 --- a/src/core/hle/kernel/k_thread.cpp +++ b/src/core/hle/kernel/k_thread.cpp @@ -188,7 +188,7 @@ ResultCode KThread::Initialize(KThreadFunction func, uintptr_t arg, VAddr user_s // Setup the stack parameters. StackParameters& sp = GetStackParameters(); sp.cur_thread = this; - sp.disable_count = 1; + sp.disable_count = 0; SetInExceptionHandler(); // Set thread ID. @@ -970,6 +970,9 @@ ResultCode KThread::Run() { // Set our state and finish. SetState(ThreadState::Runnable); + + DisableDispatch(); + return ResultSuccess; } } @@ -1054,4 +1057,16 @@ s32 GetCurrentCoreId(KernelCore& kernel) { return GetCurrentThread(kernel).GetCurrentCore(); } +KScopedDisableDispatch::~KScopedDisableDispatch() { + if (GetCurrentThread(kernel).GetDisableDispatchCount() <= 1) { + auto scheduler = kernel.CurrentScheduler(); + + if (scheduler) { + scheduler->RescheduleCurrentCore(); + } + } else { + GetCurrentThread(kernel).EnableDispatch(); + } +} + } // namespace Kernel |
