summaryrefslogtreecommitdiff
path: root/src/core/hle/kernel
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2021-03-08 13:51:37 -0800
committerGitHub <noreply@github.com>2021-03-08 13:51:37 -0800
commit69ce5e41ebd266b2cd04cb609663eaca21c8ded9 (patch)
treeed8f8429c89814266ac72db1fdf7591d03ab4c9a /src/core/hle/kernel
parent9d77ae39deacbce581103a73525af974a79ba064 (diff)
parent8f7eb194af199ef7a3b225399e8d6fede27234f2 (diff)
Merge pull request #6041 from bunnei/fiber-leaks
common: fiber: Use weak_ptr when yielding.
Diffstat (limited to 'src/core/hle/kernel')
-rw-r--r--src/core/hle/kernel/k_scheduler.cpp11
1 files changed, 3 insertions, 8 deletions
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());
}
}