浏览代码

Kernel: Unbreak SlabAllocator after startup-time constructors

Now that the kernel supports startup-time constructors, we were first
doing slab_alloc_init(), and then the constructors ran later on,
zeroing out the freelist pointers.

This meant that all slab allocators thought they were completelty
exhausted and forwarded all requests to kmalloc() instead.
Andreas Kling 5 年之前
父节点
当前提交
7ef9c703d2
共有 1 个文件被更改,包括 6 次插入5 次删除
  1. 6 5
      Kernel/Heap/SlabAllocator.cpp

+ 6 - 5
Kernel/Heap/SlabAllocator.cpp

@@ -61,11 +61,12 @@ private:
         char padding[templated_slab_size - sizeof(FreeSlab*)];
     };
 
-    FreeSlab* m_freelist { nullptr };
-    size_t m_num_allocated { 0 };
-    size_t m_num_free { 0 };
-    void* m_base { nullptr };
-    void* m_end { nullptr };
+    // NOTE: These are not default-initialized to prevent an init-time constructor from overwriting them
+    FreeSlab* m_freelist;
+    size_t m_num_allocated;
+    size_t m_num_free;
+    void* m_base;
+    void* m_end;
 
     static_assert(sizeof(FreeSlab) == templated_slab_size);
 };