diff options
| author | ameerj <52414509+ameerj@users.noreply.github.com> | 2021-02-20 20:51:11 -0500 | 
|---|---|---|
| committer | ameerj <52414509+ameerj@users.noreply.github.com> | 2021-02-20 20:51:11 -0500 | 
| commit | 8e4c9c9852b17082f9cb2e2b3d954dee6be7280f (patch) | |
| tree | 15e4fc8fb15f1d574063d89649c62bda74ac02b2 /src/core/hle | |
| parent | 2807a98168a08a0cebe5c0db42d14d0f2f03f117 (diff) | |
kernel: Fix resource release exception on exit
After rewriting the resource limit, objects releasing reserved resources require a live kernel instance.
This commit fixes exceptions that occur due to the kernel being destroyed before some objects released their resources, allowing for a graceful exit.
Diffstat (limited to 'src/core/hle')
| -rw-r--r-- | src/core/hle/kernel/kernel.cpp | 9 | ||||
| -rw-r--r-- | src/core/hle/service/time/time_manager.cpp | 4 | ||||
| -rw-r--r-- | src/core/hle/service/time/time_manager.h | 2 | 
3 files changed, 13 insertions, 2 deletions
| diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp index b6e6f115e..39c5182c5 100644 --- a/src/core/hle/kernel/kernel.cpp +++ b/src/core/hle/kernel/kernel.cpp @@ -101,8 +101,6 @@ struct KernelCore::Impl {          current_process = nullptr; -        system_resource_limit = nullptr; -          global_handle_table.Clear();          preemption_event = nullptr; @@ -111,6 +109,13 @@ struct KernelCore::Impl {          exclusive_monitor.reset(); +        hid_shared_mem = nullptr; +        font_shared_mem = nullptr; +        irs_shared_mem = nullptr; +        time_shared_mem = nullptr; + +        system_resource_limit = nullptr; +          // Next host thead ID to use, 0-3 IDs represent core threads, >3 represent others          next_host_thread_id = Core::Hardware::NUM_CPU_CORES;      } diff --git a/src/core/hle/service/time/time_manager.cpp b/src/core/hle/service/time/time_manager.cpp index 858623e2b..1f7309f6b 100644 --- a/src/core/hle/service/time/time_manager.cpp +++ b/src/core/hle/service/time/time_manager.cpp @@ -279,6 +279,10 @@ const SharedMemory& TimeManager::GetSharedMemory() const {      return impl->shared_memory;  } +void TimeManager::Shutdown() { +    impl.reset(); +} +  void TimeManager::UpdateLocalSystemClockTime(s64 posix_time) {      impl->UpdateLocalSystemClockTime(system, posix_time);  } diff --git a/src/core/hle/service/time/time_manager.h b/src/core/hle/service/time/time_manager.h index 993c7c288..4db8cc0e1 100644 --- a/src/core/hle/service/time/time_manager.h +++ b/src/core/hle/service/time/time_manager.h @@ -61,6 +61,8 @@ public:      const SharedMemory& GetSharedMemory() const; +    void Shutdown(); +      void SetupTimeZoneManager(std::string location_name,                                Clock::SteadyClockTimePoint time_zone_updated_time_point,                                std::size_t total_location_name_count, u128 time_zone_rule_version, | 
