diff options
-rw-r--r-- | src/core/hle/kernel/kernel.cpp | 1 | ||||
-rw-r--r-- | src/core/hle/kernel/kernel.h | 25 |
2 files changed, 16 insertions, 10 deletions
diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp index 1b7ba39f4..472c71cf1 100644 --- a/src/core/hle/kernel/kernel.cpp +++ b/src/core/hle/kernel/kernel.cpp @@ -692,6 +692,7 @@ void KernelCore::SetMulticore(bool is_multicore) { } void KernelCore::Initialize() { + slab_heap_container = std::make_unique<SlabHeapContainer>(); impl->Initialize(*this); } diff --git a/src/core/hle/kernel/kernel.h b/src/core/hle/kernel/kernel.h index 855bb590a..e494fe9f3 100644 --- a/src/core/hle/kernel/kernel.h +++ b/src/core/hle/kernel/kernel.h @@ -260,15 +260,15 @@ public: template <typename T> KSlabHeap<T>& SlabHeap() { if constexpr (std::is_same_v<T, Process>) { - return slab_heap_Process; + return slab_heap_container->process; } else if constexpr (std::is_same_v<T, KThread>) { - return slab_heap_KThread; + return slab_heap_container->thread; } else if constexpr (std::is_same_v<T, KEvent>) { - return slab_heap_KEvent; + return slab_heap_container->event; } else if constexpr (std::is_same_v<T, KSharedMemory>) { - return slab_heap_KSharedMemory; + return slab_heap_container->shared_memory; } else if constexpr (std::is_same_v<T, KLinkedListNode>) { - return slab_heap_KLinkedListNode; + return slab_heap_container->linked_list_node; } } @@ -301,11 +301,16 @@ private: bool exception_exited{}; private: - KSlabHeap<Process> slab_heap_Process; - KSlabHeap<KThread> slab_heap_KThread; - KSlabHeap<KEvent> slab_heap_KEvent; - KSlabHeap<KSharedMemory> slab_heap_KSharedMemory; - KSlabHeap<KLinkedListNode> slab_heap_KLinkedListNode; + /// Helper to encapsulate all slab heaps in a single heap allocated container + struct SlabHeapContainer { + KSlabHeap<Process> process; + KSlabHeap<KThread> thread; + KSlabHeap<KEvent> event; + KSlabHeap<KSharedMemory> shared_memory; + KSlabHeap<KLinkedListNode> linked_list_node; + }; + + std::unique_ptr<SlabHeapContainer> slab_heap_container; }; } // namespace Kernel |