diff options
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/cpu_manager.cpp | 8 | ||||
| -rw-r--r-- | src/core/hle/kernel/k_scheduler.cpp | 11 | 
2 files changed, 7 insertions, 12 deletions
| diff --git a/src/core/cpu_manager.cpp b/src/core/cpu_manager.cpp index 8f04fb8f5..bdb374792 100644 --- a/src/core/cpu_manager.cpp +++ b/src/core/cpu_manager.cpp @@ -148,7 +148,7 @@ void CpuManager::MultiCoreRunSuspendThread() {          auto core = kernel.GetCurrentHostThreadID();          auto& scheduler = *kernel.CurrentScheduler();          Kernel::KThread* current_thread = scheduler.GetCurrentThread(); -        Common::Fiber::YieldTo(current_thread->GetHostContext(), core_data[core].host_context); +        Common::Fiber::YieldTo(current_thread->GetHostContext(), *core_data[core].host_context);          ASSERT(scheduler.ContextSwitchPending());          ASSERT(core == kernel.GetCurrentHostThreadID());          scheduler.RescheduleCurrentCore(); @@ -245,7 +245,7 @@ void CpuManager::SingleCoreRunSuspendThread() {          auto core = kernel.GetCurrentHostThreadID();          auto& scheduler = *kernel.CurrentScheduler();          Kernel::KThread* current_thread = scheduler.GetCurrentThread(); -        Common::Fiber::YieldTo(current_thread->GetHostContext(), core_data[0].host_context); +        Common::Fiber::YieldTo(current_thread->GetHostContext(), *core_data[0].host_context);          ASSERT(scheduler.ContextSwitchPending());          ASSERT(core == kernel.GetCurrentHostThreadID());          scheduler.RescheduleCurrentCore(); @@ -271,7 +271,7 @@ void CpuManager::PreemptSingleCore(bool from_running_enviroment) {          scheduler.Unload(scheduler.GetCurrentThread());          auto& next_scheduler = kernel.Scheduler(current_core); -        Common::Fiber::YieldTo(current_thread->GetHostContext(), next_scheduler.ControlContext()); +        Common::Fiber::YieldTo(current_thread->GetHostContext(), *next_scheduler.ControlContext());      }      // May have changed scheduler @@ -363,7 +363,7 @@ void CpuManager::RunThread(std::size_t core) {          auto current_thread = system.Kernel().CurrentScheduler()->GetCurrentThread();          data.is_running = true; -        Common::Fiber::YieldTo(data.host_context, current_thread->GetHostContext()); +        Common::Fiber::YieldTo(data.host_context, *current_thread->GetHostContext());          data.is_running = false;          data.is_paused = true;          data.exit_barrier->Wait(); diff --git a/src/core/hle/kernel/k_scheduler.cpp b/src/core/hle/kernel/k_scheduler.cpp index 6e89c3042..e7de48476 100644 --- a/src/core/hle/kernel/k_scheduler.cpp +++ b/src/core/hle/kernel/k_scheduler.cpp @@ -734,7 +734,7 @@ void KScheduler::ScheduleImpl() {      }      guard.unlock(); -    Common::Fiber::YieldTo(*old_context, switch_fiber); +    Common::Fiber::YieldTo(*old_context, *switch_fiber);      /// When a thread wakes up, the scheduler may have changed to other in another core.      auto& next_scheduler = *system.Kernel().CurrentScheduler();      next_scheduler.SwitchContextStep2(); @@ -769,13 +769,8 @@ void KScheduler::SwitchToCurrent() {                      break;                  }              } -            std::shared_ptr<Common::Fiber>* next_context; -            if (next_thread != nullptr) { -                next_context = &next_thread->GetHostContext(); -            } else { -                next_context = &idle_thread->GetHostContext(); -            } -            Common::Fiber::YieldTo(switch_fiber, *next_context); +            auto thread = next_thread ? next_thread : idle_thread; +            Common::Fiber::YieldTo(switch_fiber, *thread->GetHostContext());          } while (!is_switch_pending());      }  } | 
