diff options
| author | 2021-06-28 14:38:14 -0700 | |
|---|---|---|
| committer | 2021-07-20 18:54:55 -0700 | |
| commit | 929994132a4f39ca4ab2975caf47a2a99a19b518 (patch) | |
| tree | b4109845efdac23561d43b3f7ab9478a14532594 /src/core/hle/kernel/kernel.cpp | |
| parent | Merge pull request #6649 from german77/toggle_sdl (diff) | |
| download | yuzu-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.cpp | 16 |
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 | ||
| 863 | void KernelCore::RegisterKernelObject(KAutoObject* object) { | ||
| 864 | impl->registered_objects.insert(object); | ||
| 865 | } | ||
| 866 | |||
| 867 | void KernelCore::UnregisterKernelObject(KAutoObject* object) { | ||
| 868 | impl->registered_objects.erase(object); | ||
| 869 | } | ||
| 870 | |||
| 855 | bool KernelCore::IsValidNamedPort(NamedPortTable::const_iterator port) const { | 871 | bool KernelCore::IsValidNamedPort(NamedPortTable::const_iterator port) const { |
| 856 | return port != impl->named_ports.cend(); | 872 | return port != impl->named_ports.cend(); |
| 857 | } | 873 | } |