summaryrefslogtreecommitdiff
path: root/src/core/hle/kernel/kernel.cpp
diff options
context:
space:
mode:
authorGravatar bunnei2021-06-28 14:38:14 -0700
committerGravatar bunnei2021-07-20 18:54:55 -0700
commit929994132a4f39ca4ab2975caf47a2a99a19b518 (patch)
treeb4109845efdac23561d43b3f7ab9478a14532594 /src/core/hle/kernel/kernel.cpp
parentMerge pull request #6649 from german77/toggle_sdl (diff)
downloadyuzu-929994132a4f39ca4ab2975caf47a2a99a19b518.tar.gz
yuzu-929994132a4f39ca4ab2975caf47a2a99a19b518.tar.xz
yuzu-929994132a4f39ca4ab2975caf47a2a99a19b518.zip
hle: kernel: Provide methods for tracking dangling kernel objects.
Diffstat (limited to 'src/core/hle/kernel/kernel.cpp')
-rw-r--r--src/core/hle/kernel/kernel.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp
index 64bd0c494..ee60072c2 100644
--- a/src/core/hle/kernel/kernel.cpp
+++ b/src/core/hle/kernel/kernel.cpp
@@ -142,6 +142,13 @@ struct KernelCore::Impl {
142 142
143 // Next host thead ID to use, 0-3 IDs represent core threads, >3 represent others 143 // Next host thead ID to use, 0-3 IDs represent core threads, >3 represent others
144 next_host_thread_id = Core::Hardware::NUM_CPU_CORES; 144 next_host_thread_id = Core::Hardware::NUM_CPU_CORES;
145
146 // Track kernel objects that were not freed on shutdown
147 if (registered_objects.size()) {
148 LOG_WARNING(Kernel, "{} kernel objects were dangling on shutdown!",
149 registered_objects.size());
150 registered_objects.clear();
151 }
145 } 152 }
146 153
147 void InitializePhysicalCores() { 154 void InitializePhysicalCores() {
@@ -656,6 +663,7 @@ struct KernelCore::Impl {
656 /// the ConnectToPort SVC. 663 /// the ConnectToPort SVC.
657 std::unordered_map<std::string, ServiceInterfaceFactory> service_interface_factory; 664 std::unordered_map<std::string, ServiceInterfaceFactory> service_interface_factory;
658 NamedPortTable named_ports; 665 NamedPortTable named_ports;
666 std::unordered_set<KAutoObject*> registered_objects;
659 667
660 std::unique_ptr<Core::ExclusiveMonitor> exclusive_monitor; 668 std::unique_ptr<Core::ExclusiveMonitor> exclusive_monitor;
661 std::vector<Kernel::PhysicalCore> cores; 669 std::vector<Kernel::PhysicalCore> cores;
@@ -852,6 +860,14 @@ KClientPort* KernelCore::CreateNamedServicePort(std::string name) {
852 return &search->second(impl->system.ServiceManager(), impl->system); 860 return &search->second(impl->system.ServiceManager(), impl->system);
853} 861}
854 862
863void KernelCore::RegisterKernelObject(KAutoObject* object) {
864 impl->registered_objects.insert(object);
865}
866
867void KernelCore::UnregisterKernelObject(KAutoObject* object) {
868 impl->registered_objects.erase(object);
869}
870
855bool KernelCore::IsValidNamedPort(NamedPortTable::const_iterator port) const { 871bool KernelCore::IsValidNamedPort(NamedPortTable::const_iterator port) const {
856 return port != impl->named_ports.cend(); 872 return port != impl->named_ports.cend();
857} 873}