summaryrefslogtreecommitdiff
path: root/src/core/core.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/core.cpp')
-rw-r--r--src/core/core.cpp16
1 files changed, 3 insertions, 13 deletions
diff --git a/src/core/core.cpp b/src/core/core.cpp
index 3c75f42ae..c3a0f9dae 100644
--- a/src/core/core.cpp
+++ b/src/core/core.cpp
@@ -83,12 +83,6 @@ FileSys::StorageId GetStorageIdForFrontendSlot(
83 } 83 }
84} 84}
85 85
86void KProcessDeleter(Kernel::KProcess* process) {
87 process->Destroy();
88}
89
90using KProcessPtr = std::unique_ptr<Kernel::KProcess, decltype(&KProcessDeleter)>;
91
92} // Anonymous namespace 86} // Anonymous namespace
93 87
94FileSys::VirtualFile GetGameFileFromPath(const FileSys::VirtualFilesystem& vfs, 88FileSys::VirtualFile GetGameFileFromPath(const FileSys::VirtualFilesystem& vfs,
@@ -261,11 +255,10 @@ struct System::Impl {
261 } 255 }
262 256
263 telemetry_session->AddInitialInfo(*app_loader, fs_controller, *content_provider); 257 telemetry_session->AddInitialInfo(*app_loader, fs_controller, *content_provider);
264 main_process = KProcessPtr{Kernel::KProcess::Create(system.Kernel()), KProcessDeleter}; 258 auto main_process = Kernel::KProcess::Create(system.Kernel());
265 ASSERT(Kernel::KProcess::Initialize(main_process.get(), system, "main", 259 ASSERT(Kernel::KProcess::Initialize(main_process, system, "main",
266 Kernel::KProcess::ProcessType::Userland) 260 Kernel::KProcess::ProcessType::Userland)
267 .IsSuccess()); 261 .IsSuccess());
268 main_process->Open();
269 const auto [load_result, load_parameters] = app_loader->Load(*main_process, system); 262 const auto [load_result, load_parameters] = app_loader->Load(*main_process, system);
270 if (load_result != Loader::ResultStatus::Success) { 263 if (load_result != Loader::ResultStatus::Success) {
271 LOG_CRITICAL(Core, "Failed to load ROM (Error {})!", load_result); 264 LOG_CRITICAL(Core, "Failed to load ROM (Error {})!", load_result);
@@ -275,7 +268,7 @@ struct System::Impl {
275 static_cast<u32>(SystemResultStatus::ErrorLoader) + static_cast<u32>(load_result)); 268 static_cast<u32>(SystemResultStatus::ErrorLoader) + static_cast<u32>(load_result));
276 } 269 }
277 AddGlueRegistrationForProcess(*app_loader, *main_process); 270 AddGlueRegistrationForProcess(*app_loader, *main_process);
278 kernel.MakeCurrentProcess(main_process.get()); 271 kernel.MakeCurrentProcess(main_process);
279 kernel.InitializeCores(); 272 kernel.InitializeCores();
280 273
281 // Initialize cheat engine 274 // Initialize cheat engine
@@ -340,8 +333,6 @@ struct System::Impl {
340 kernel.Shutdown(); 333 kernel.Shutdown();
341 memory.Reset(); 334 memory.Reset();
342 applet_manager.ClearAll(); 335 applet_manager.ClearAll();
343 // TODO: The main process should be freed based on KAutoObject ref counting.
344 main_process.reset();
345 336
346 LOG_DEBUG(Core, "Shutdown OK"); 337 LOG_DEBUG(Core, "Shutdown OK");
347 } 338 }
@@ -403,7 +394,6 @@ struct System::Impl {
403 std::unique_ptr<Tegra::GPU> gpu_core; 394 std::unique_ptr<Tegra::GPU> gpu_core;
404 std::unique_ptr<Hardware::InterruptManager> interrupt_manager; 395 std::unique_ptr<Hardware::InterruptManager> interrupt_manager;
405 std::unique_ptr<Core::DeviceMemory> device_memory; 396 std::unique_ptr<Core::DeviceMemory> device_memory;
406 KProcessPtr main_process{nullptr, KProcessDeleter};
407 Core::Memory::Memory memory; 397 Core::Memory::Memory memory;
408 CpuManager cpu_manager; 398 CpuManager cpu_manager;
409 std::atomic_bool is_powered_on{}; 399 std::atomic_bool is_powered_on{};