mirror of
https://git.h3cjp.net/H3cJP/citra.git
synced 2024-11-30 07:52:45 +00:00
Kernel: Correct Host Context on Threads and Scheduler.
This commit is contained in:
parent
0e4c35c591
commit
d240143588
|
@ -736,15 +736,15 @@ void Scheduler::SwitchContext() {
|
|||
previous_thread->context_guard.unlock();
|
||||
}
|
||||
|
||||
std::shared_ptr<Common::Fiber> old_context;
|
||||
std::shared_ptr<Common::Fiber>* old_context;
|
||||
if (previous_thread != nullptr) {
|
||||
old_context = previous_thread->GetHostContext();
|
||||
old_context = &previous_thread->GetHostContext();
|
||||
} else {
|
||||
old_context = idle_thread->GetHostContext();
|
||||
old_context = &idle_thread->GetHostContext();
|
||||
}
|
||||
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();
|
||||
|
@ -774,13 +774,13 @@ void Scheduler::SwitchToCurrent() {
|
|||
break;
|
||||
}
|
||||
}
|
||||
std::shared_ptr<Common::Fiber> next_context;
|
||||
std::shared_ptr<Common::Fiber>* next_context;
|
||||
if (current_thread != nullptr) {
|
||||
next_context = current_thread->GetHostContext();
|
||||
next_context = ¤t_thread->GetHostContext();
|
||||
} else {
|
||||
next_context = idle_thread->GetHostContext();
|
||||
next_context = &idle_thread->GetHostContext();
|
||||
}
|
||||
Common::Fiber::YieldTo(switch_fiber, next_context);
|
||||
Common::Fiber::YieldTo(switch_fiber, *next_context);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -236,7 +236,7 @@ public:
|
|||
|
||||
void OnThreadStart();
|
||||
|
||||
std::shared_ptr<Common::Fiber> ControlContext() {
|
||||
std::shared_ptr<Common::Fiber>& ControlContext() {
|
||||
return switch_fiber;
|
||||
}
|
||||
|
||||
|
|
|
@ -150,7 +150,7 @@ static void ResetThreadContext64(Core::ARM_Interface::ThreadContext64& context,
|
|||
context.fpcr = 0;
|
||||
}
|
||||
|
||||
std::shared_ptr<Common::Fiber> Thread::GetHostContext() const {
|
||||
std::shared_ptr<Common::Fiber>& Thread::GetHostContext() {
|
||||
return host_context;
|
||||
}
|
||||
|
||||
|
|
|
@ -342,7 +342,7 @@ public:
|
|||
was_running = value;
|
||||
}
|
||||
|
||||
std::shared_ptr<Common::Fiber> GetHostContext() const;
|
||||
std::shared_ptr<Common::Fiber>& GetHostContext();
|
||||
|
||||
ThreadStatus GetStatus() const {
|
||||
return status;
|
||||
|
|
Loading…
Reference in a new issue