diff options
| author | 2021-10-26 18:12:13 +0800 | |
|---|---|---|
| committer | 2021-10-27 09:06:30 +0800 | |
| commit | dd29285e356838b2326f1d2261f0a97eeded713e (patch) | |
| tree | 4f71c3446f4164ec06beae0f7fed23e0b022ddc2 | |
| parent | Revert PR7009 (diff) | |
| download | yuzu-dd29285e356838b2326f1d2261f0a97eeded713e.tar.gz yuzu-dd29285e356838b2326f1d2261f0a97eeded713e.tar.xz yuzu-dd29285e356838b2326f1d2261f0a97eeded713e.zip | |
Fix dangling kernel objects when exiting
| -rw-r--r-- | src/core/hle/kernel/k_process.cpp | 11 | ||||
| -rw-r--r-- | src/core/hle/kernel/kernel.cpp | 13 |
2 files changed, 13 insertions, 11 deletions
diff --git a/src/core/hle/kernel/k_process.cpp b/src/core/hle/kernel/k_process.cpp index 211157ccc..76fd8c285 100644 --- a/src/core/hle/kernel/k_process.cpp +++ b/src/core/hle/kernel/k_process.cpp | |||
| @@ -434,11 +434,6 @@ void KProcess::PrepareForTermination() { | |||
| 434 | } | 434 | } |
| 435 | 435 | ||
| 436 | void KProcess::Finalize() { | 436 | void KProcess::Finalize() { |
| 437 | // Release memory to the resource limit. | ||
| 438 | if (resource_limit != nullptr) { | ||
| 439 | resource_limit->Close(); | ||
| 440 | } | ||
| 441 | |||
| 442 | // Finalize the handle table and close any open handles. | 437 | // Finalize the handle table and close any open handles. |
| 443 | handle_table.Finalize(); | 438 | handle_table.Finalize(); |
| 444 | 439 | ||
| @@ -460,6 +455,12 @@ void KProcess::Finalize() { | |||
| 460 | } | 455 | } |
| 461 | } | 456 | } |
| 462 | 457 | ||
| 458 | // Release memory to the resource limit. | ||
| 459 | if (resource_limit != nullptr) { | ||
| 460 | resource_limit->Close(); | ||
| 461 | resource_limit = nullptr; | ||
| 462 | } | ||
| 463 | |||
| 463 | // Perform inherited finalization. | 464 | // Perform inherited finalization. |
| 464 | KAutoObjectWithSlabHeapAndContainer<KProcess, KSynchronizationObject>::Finalize(); | 465 | KAutoObjectWithSlabHeapAndContainer<KProcess, KSynchronizationObject>::Finalize(); |
| 465 | } | 466 | } |
diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp index db9f55864..4a139c5e7 100644 --- a/src/core/hle/kernel/kernel.cpp +++ b/src/core/hle/kernel/kernel.cpp | |||
| @@ -91,12 +91,6 @@ struct KernelCore::Impl { | |||
| 91 | } | 91 | } |
| 92 | 92 | ||
| 93 | void Shutdown() { | 93 | void Shutdown() { |
| 94 | // Shutdown all processes. | ||
| 95 | if (current_process) { | ||
| 96 | current_process->Finalize(); | ||
| 97 | current_process->Close(); | ||
| 98 | current_process = nullptr; | ||
| 99 | } | ||
| 100 | process_list.clear(); | 94 | process_list.clear(); |
| 101 | 95 | ||
| 102 | // Close all open server ports. | 96 | // Close all open server ports. |
| @@ -181,6 +175,13 @@ struct KernelCore::Impl { | |||
| 181 | } | 175 | } |
| 182 | } | 176 | } |
| 183 | 177 | ||
| 178 | // Shutdown all processes. | ||
| 179 | if (current_process) { | ||
| 180 | current_process->Finalize(); | ||
| 181 | current_process->Close(); | ||
| 182 | current_process = nullptr; | ||
| 183 | } | ||
| 184 | |||
| 184 | // Track kernel objects that were not freed on shutdown | 185 | // Track kernel objects that were not freed on shutdown |
| 185 | { | 186 | { |
| 186 | std::lock_guard lk(registered_objects_lock); | 187 | std::lock_guard lk(registered_objects_lock); |