Просмотр исходного кода

hle: kernel: Move slab heaps to their own container.

bunnei 5 лет назад
Родитель
Сommit
cfa7b92563
2 измененных файлов с 16 добавлено и 10 удалено
  1. 1 0
      src/core/hle/kernel/kernel.cpp
  2. 15 10
      src/core/hle/kernel/kernel.h

+ 1 - 0
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);
 }
 

+ 15 - 10
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