diff options
author | Lioncash <mathew1800@gmail.com> | 2018-09-06 20:34:51 -0400 |
---|---|---|
committer | Lioncash <mathew1800@gmail.com> | 2018-09-06 20:52:58 -0400 |
commit | 3f17fe71334a27a60bf54adc55eabe2356ed31f5 (patch) | |
tree | 11fd2e48608908feb95c9024e3bd8e1267ec538a /src/core/core.cpp | |
parent | a164b413fa479ec1ab0322044ca5ce6c16708e3a (diff) |
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/core.cpp')
-rw-r--r-- | src/core/core.cpp | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/core/core.cpp b/src/core/core.cpp index bf39ad689b..713ee17c1d 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp @@ -136,7 +136,7 @@ struct System::Impl { if (virtual_filesystem == nullptr) virtual_filesystem = std::make_shared<FileSys::RealVfsFilesystem>(); - current_process = Kernel::Process::Create(kernel, "main"); + kernel.MakeCurrentProcess(Kernel::Process::Create(kernel, "main")); cpu_barrier = std::make_shared<CpuBarrier>(); cpu_exclusive_monitor = Cpu::MakeExclusiveMonitor(cpu_cores.size()); @@ -202,7 +202,7 @@ struct System::Impl { return init_result; } - const Loader::ResultStatus load_result{app_loader->Load(current_process)}; + const Loader::ResultStatus load_result{app_loader->Load(kernel.CurrentProcess())}; if (load_result != Loader::ResultStatus::Success) { LOG_CRITICAL(Core, "Failed to load ROM (Error {})!", static_cast<int>(load_result)); Shutdown(); @@ -281,7 +281,6 @@ struct System::Impl { std::unique_ptr<VideoCore::RendererBase> renderer; std::unique_ptr<Tegra::GPU> gpu_core; std::shared_ptr<Tegra::DebugContext> debug_context; - Kernel::SharedPtr<Kernel::Process> current_process; std::shared_ptr<ExclusiveMonitor> cpu_exclusive_monitor; std::shared_ptr<CpuBarrier> cpu_barrier; std::array<std::shared_ptr<Cpu>, NUM_CPU_CORES> cpu_cores; @@ -363,7 +362,11 @@ const std::shared_ptr<Kernel::Scheduler>& System::Scheduler(size_t core_index) { } Kernel::SharedPtr<Kernel::Process>& System::CurrentProcess() { - return impl->current_process; + return impl->kernel.CurrentProcess(); +} + +const Kernel::SharedPtr<Kernel::Process>& System::CurrentProcess() const { + return impl->kernel.CurrentProcess(); } ARM_Interface& System::ArmInterface(size_t core_index) { |