فهرست منبع

Revert PR7009

Feng Chen 4 سال پیش
والد
کامیت
052017e189
2فایلهای تغییر یافته به همراه5 افزوده شده و 15 حذف شده
  1. 3 13
      src/core/core.cpp
  2. 2 2
      src/core/hle/kernel/kernel.cpp

+ 3 - 13
src/core/core.cpp

@@ -83,12 +83,6 @@ FileSys::StorageId GetStorageIdForFrontendSlot(
     }
     }
 }
 }
 
 
-void KProcessDeleter(Kernel::KProcess* process) {
-    process->Destroy();
-}
-
-using KProcessPtr = std::unique_ptr<Kernel::KProcess, decltype(&KProcessDeleter)>;
-
 } // Anonymous namespace
 } // Anonymous namespace
 
 
 FileSys::VirtualFile GetGameFileFromPath(const FileSys::VirtualFilesystem& vfs,
 FileSys::VirtualFile GetGameFileFromPath(const FileSys::VirtualFilesystem& vfs,
@@ -261,11 +255,10 @@ struct System::Impl {
         }
         }
 
 
         telemetry_session->AddInitialInfo(*app_loader, fs_controller, *content_provider);
         telemetry_session->AddInitialInfo(*app_loader, fs_controller, *content_provider);
-        main_process = KProcessPtr{Kernel::KProcess::Create(system.Kernel()), KProcessDeleter};
-        ASSERT(Kernel::KProcess::Initialize(main_process.get(), system, "main",
+        auto main_process = Kernel::KProcess::Create(system.Kernel());
+        ASSERT(Kernel::KProcess::Initialize(main_process, system, "main",
                                             Kernel::KProcess::ProcessType::Userland)
                                             Kernel::KProcess::ProcessType::Userland)
                    .IsSuccess());
                    .IsSuccess());
-        main_process->Open();
         const auto [load_result, load_parameters] = app_loader->Load(*main_process, system);
         const auto [load_result, load_parameters] = app_loader->Load(*main_process, system);
         if (load_result != Loader::ResultStatus::Success) {
         if (load_result != Loader::ResultStatus::Success) {
             LOG_CRITICAL(Core, "Failed to load ROM (Error {})!", load_result);
             LOG_CRITICAL(Core, "Failed to load ROM (Error {})!", load_result);
@@ -275,7 +268,7 @@ struct System::Impl {
                 static_cast<u32>(SystemResultStatus::ErrorLoader) + static_cast<u32>(load_result));
                 static_cast<u32>(SystemResultStatus::ErrorLoader) + static_cast<u32>(load_result));
         }
         }
         AddGlueRegistrationForProcess(*app_loader, *main_process);
         AddGlueRegistrationForProcess(*app_loader, *main_process);
-        kernel.MakeCurrentProcess(main_process.get());
+        kernel.MakeCurrentProcess(main_process);
         kernel.InitializeCores();
         kernel.InitializeCores();
 
 
         // Initialize cheat engine
         // Initialize cheat engine
@@ -340,8 +333,6 @@ struct System::Impl {
         kernel.Shutdown();
         kernel.Shutdown();
         memory.Reset();
         memory.Reset();
         applet_manager.ClearAll();
         applet_manager.ClearAll();
-        // TODO: The main process should be freed based on KAutoObject ref counting.
-        main_process.reset();
 
 
         LOG_DEBUG(Core, "Shutdown OK");
         LOG_DEBUG(Core, "Shutdown OK");
     }
     }
@@ -403,7 +394,6 @@ struct System::Impl {
     std::unique_ptr<Tegra::GPU> gpu_core;
     std::unique_ptr<Tegra::GPU> gpu_core;
     std::unique_ptr<Hardware::InterruptManager> interrupt_manager;
     std::unique_ptr<Hardware::InterruptManager> interrupt_manager;
     std::unique_ptr<Core::DeviceMemory> device_memory;
     std::unique_ptr<Core::DeviceMemory> device_memory;
-    KProcessPtr main_process{nullptr, KProcessDeleter};
     Core::Memory::Memory memory;
     Core::Memory::Memory memory;
     CpuManager cpu_manager;
     CpuManager cpu_manager;
     std::atomic_bool is_powered_on{};
     std::atomic_bool is_powered_on{};

+ 2 - 2
src/core/hle/kernel/kernel.cpp

@@ -174,8 +174,8 @@ struct KernelCore::Impl {
         {
         {
             std::lock_guard lk(registered_in_use_objects_lock);
             std::lock_guard lk(registered_in_use_objects_lock);
             if (registered_in_use_objects.size()) {
             if (registered_in_use_objects.size()) {
-                for (auto thread : registered_in_use_objects) {
-                    thread->Close();
+                for (auto& object : registered_in_use_objects) {
+                    object->Close();
                 }
                 }
                 registered_in_use_objects.clear();
                 registered_in_use_objects.clear();
             }
             }