diff options
| author | 2018-09-06 20:34:51 -0400 | |
|---|---|---|
| committer | 2018-09-06 20:52:58 -0400 | |
| commit | 3f17fe71334a27a60bf54adc55eabe2356ed31f5 (patch) | |
| tree | 11fd2e48608908feb95c9024e3bd8e1267ec538a /src/core/hle/kernel/kernel.cpp | |
| parent | Merge pull request #1250 from lioncash/file-sys (diff) | |
| download | yuzu-3f17fe71334a27a60bf54adc55eabe2356ed31f5.tar.gz yuzu-3f17fe71334a27a60bf54adc55eabe2356ed31f5.tar.xz yuzu-3f17fe71334a27a60bf54adc55eabe2356ed31f5.zip | |
core: Migrate current_process pointer to the kernel
Given we now have the kernel as a class, it doesn't make sense to keep
the current process pointer within the System class, as processes are
related to the kernel.
This also gets rid of a subtle case where memory wouldn't be freed on
core shutdown, as the current_process pointer would never be reset,
causing the pointed to contents to continue to live.
Diffstat (limited to 'src/core/hle/kernel/kernel.cpp')
| -rw-r--r-- | src/core/hle/kernel/kernel.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp index 7902c2882..3e0800a71 100644 --- a/src/core/hle/kernel/kernel.cpp +++ b/src/core/hle/kernel/kernel.cpp | |||
| @@ -116,6 +116,7 @@ struct KernelCore::Impl { | |||
| 116 | next_thread_id = 1; | 116 | next_thread_id = 1; |
| 117 | 117 | ||
| 118 | process_list.clear(); | 118 | process_list.clear(); |
| 119 | current_process.reset(); | ||
| 119 | 120 | ||
| 120 | handle_table.Clear(); | 121 | handle_table.Clear(); |
| 121 | resource_limits.fill(nullptr); | 122 | resource_limits.fill(nullptr); |
| @@ -206,6 +207,7 @@ struct KernelCore::Impl { | |||
| 206 | 207 | ||
| 207 | // Lists all processes that exist in the current session. | 208 | // Lists all processes that exist in the current session. |
| 208 | std::vector<SharedPtr<Process>> process_list; | 209 | std::vector<SharedPtr<Process>> process_list; |
| 210 | SharedPtr<Process> current_process; | ||
| 209 | 211 | ||
| 210 | Kernel::HandleTable handle_table; | 212 | Kernel::HandleTable handle_table; |
| 211 | std::array<SharedPtr<ResourceLimit>, 4> resource_limits; | 213 | std::array<SharedPtr<ResourceLimit>, 4> resource_limits; |
| @@ -264,6 +266,18 @@ void KernelCore::AppendNewProcess(SharedPtr<Process> process) { | |||
| 264 | impl->process_list.push_back(std::move(process)); | 266 | impl->process_list.push_back(std::move(process)); |
| 265 | } | 267 | } |
| 266 | 268 | ||
| 269 | void KernelCore::MakeCurrentProcess(SharedPtr<Process> process) { | ||
| 270 | impl->current_process = std::move(process); | ||
| 271 | } | ||
| 272 | |||
| 273 | SharedPtr<Process>& KernelCore::CurrentProcess() { | ||
| 274 | return impl->current_process; | ||
| 275 | } | ||
| 276 | |||
| 277 | const SharedPtr<Process>& KernelCore::CurrentProcess() const { | ||
| 278 | return impl->current_process; | ||
| 279 | } | ||
| 280 | |||
| 267 | void KernelCore::AddNamedPort(std::string name, SharedPtr<ClientPort> port) { | 281 | void KernelCore::AddNamedPort(std::string name, SharedPtr<ClientPort> port) { |
| 268 | impl->named_ports.emplace(std::move(name), std::move(port)); | 282 | impl->named_ports.emplace(std::move(name), std::move(port)); |
| 269 | } | 283 | } |