summaryrefslogtreecommitdiff
path: root/src/core/hle/kernel/kernel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/hle/kernel/kernel.cpp')
-rw-r--r--src/core/hle/kernel/kernel.cpp34
1 files changed, 21 insertions, 13 deletions
diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp
index 7307cf262..f23c629dc 100644
--- a/src/core/hle/kernel/kernel.cpp
+++ b/src/core/hle/kernel/kernel.cpp
@@ -95,19 +95,7 @@ struct KernelCore::Impl {
95 95
96 process_list.clear(); 96 process_list.clear();
97 97
98 // Close all open server sessions and ports. 98 CloseServices();
99 std::unordered_set<KAutoObject*> server_objects_;
100 {
101 std::scoped_lock lk(server_objects_lock);
102 server_objects_ = server_objects;
103 server_objects.clear();
104 }
105 for (auto* server_object : server_objects_) {
106 server_object->Close();
107 }
108
109 // Ensures all service threads gracefully shutdown.
110 ClearServiceThreads();
111 99
112 next_object_id = 0; 100 next_object_id = 0;
113 next_kernel_process_id = KProcess::InitialKIPIDMin; 101 next_kernel_process_id = KProcess::InitialKIPIDMin;
@@ -191,6 +179,22 @@ struct KernelCore::Impl {
191 global_object_list_container.reset(); 179 global_object_list_container.reset();
192 } 180 }
193 181
182 void CloseServices() {
183 // Close all open server sessions and ports.
184 std::unordered_set<KAutoObject*> server_objects_;
185 {
186 std::scoped_lock lk(server_objects_lock);
187 server_objects_ = server_objects;
188 server_objects.clear();
189 }
190 for (auto* server_object : server_objects_) {
191 server_object->Close();
192 }
193
194 // Ensures all service threads gracefully shutdown.
195 ClearServiceThreads();
196 }
197
194 void InitializePhysicalCores() { 198 void InitializePhysicalCores() {
195 exclusive_monitor = 199 exclusive_monitor =
196 Core::MakeExclusiveMonitor(system.Memory(), Core::Hardware::NUM_CPU_CORES); 200 Core::MakeExclusiveMonitor(system.Memory(), Core::Hardware::NUM_CPU_CORES);
@@ -813,6 +817,10 @@ void KernelCore::Shutdown() {
813 impl->Shutdown(); 817 impl->Shutdown();
814} 818}
815 819
820void KernelCore::CloseServices() {
821 impl->CloseServices();
822}
823
816const KResourceLimit* KernelCore::GetSystemResourceLimit() const { 824const KResourceLimit* KernelCore::GetSystemResourceLimit() const {
817 return impl->system_resource_limit; 825 return impl->system_resource_limit;
818} 826}