mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-11-04 00:49:02 -06:00 
			
		
		
		
	Merge pull request #7009 from ameerj/main_process_cleanup
core: Destroy main_process during shutdown
This commit is contained in:
		@@ -83,6 +83,12 @@ FileSys::StorageId GetStorageIdForFrontendSlot(
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void KProcessDeleter(Kernel::KProcess* process) {
 | 
			
		||||
    process->Destroy();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
using KProcessPtr = std::unique_ptr<Kernel::KProcess, decltype(&KProcessDeleter)>;
 | 
			
		||||
 | 
			
		||||
} // Anonymous namespace
 | 
			
		||||
 | 
			
		||||
FileSys::VirtualFile GetGameFileFromPath(const FileSys::VirtualFilesystem& vfs,
 | 
			
		||||
@@ -233,8 +239,8 @@ struct System::Impl {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        telemetry_session->AddInitialInfo(*app_loader, fs_controller, *content_provider);
 | 
			
		||||
        auto main_process = Kernel::KProcess::Create(system.Kernel());
 | 
			
		||||
        ASSERT(Kernel::KProcess::Initialize(main_process, system, "main",
 | 
			
		||||
        main_process = KProcessPtr{Kernel::KProcess::Create(system.Kernel()), KProcessDeleter};
 | 
			
		||||
        ASSERT(Kernel::KProcess::Initialize(main_process.get(), system, "main",
 | 
			
		||||
                                            Kernel::KProcess::ProcessType::Userland)
 | 
			
		||||
                   .IsSuccess());
 | 
			
		||||
        main_process->Open();
 | 
			
		||||
@@ -247,7 +253,7 @@ struct System::Impl {
 | 
			
		||||
                                             static_cast<u32>(load_result));
 | 
			
		||||
        }
 | 
			
		||||
        AddGlueRegistrationForProcess(*app_loader, *main_process);
 | 
			
		||||
        kernel.MakeCurrentProcess(main_process);
 | 
			
		||||
        kernel.MakeCurrentProcess(main_process.get());
 | 
			
		||||
        kernel.InitializeCores();
 | 
			
		||||
 | 
			
		||||
        // Initialize cheat engine
 | 
			
		||||
@@ -316,6 +322,8 @@ struct System::Impl {
 | 
			
		||||
        kernel.Shutdown();
 | 
			
		||||
        memory.Reset();
 | 
			
		||||
        applet_manager.ClearAll();
 | 
			
		||||
        // TODO: The main process should be freed based on KAutoObject ref counting.
 | 
			
		||||
        main_process.reset();
 | 
			
		||||
 | 
			
		||||
        LOG_DEBUG(Core, "Shutdown OK");
 | 
			
		||||
    }
 | 
			
		||||
@@ -374,6 +382,7 @@ struct System::Impl {
 | 
			
		||||
    std::unique_ptr<Tegra::GPU> gpu_core;
 | 
			
		||||
    std::unique_ptr<Hardware::InterruptManager> interrupt_manager;
 | 
			
		||||
    std::unique_ptr<Core::DeviceMemory> device_memory;
 | 
			
		||||
    KProcessPtr main_process{nullptr, KProcessDeleter};
 | 
			
		||||
    Core::Memory::Memory memory;
 | 
			
		||||
    CpuManager cpu_manager;
 | 
			
		||||
    std::atomic_bool is_powered_on{};
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user