diff --git a/src/system/kernel/slab/ObjectDepot.cpp b/src/system/kernel/slab/ObjectDepot.cpp index e49540b68c..c6ab431ef5 100644 --- a/src/system/kernel/slab/ObjectDepot.cpp +++ b/src/system/kernel/slab/ObjectDepot.cpp @@ -357,10 +357,10 @@ object_depot_make_empty(object_depot* depot, uint32 flags) // detach the depot's full and empty magazines slab_queue fullMagazines = depot->full; - depot->full.head = depot->full.tail = NULL; + depot->full.Init(); slab_queue emptyMagazines = depot->empty; - depot->empty.head = depot->empty.tail = NULL; + depot->empty.Init(); writeLocker.Unlock(); diff --git a/src/system/kernel/slab/slab_queue.h b/src/system/kernel/slab/slab_queue.h index c3f333a9f6..76bfd52881 100644 --- a/src/system/kernel/slab/slab_queue.h +++ b/src/system/kernel/slab/slab_queue.h @@ -8,11 +8,14 @@ #include +#include "kernel_debug_config.h" + struct slab_queue_link { slab_queue_link* next; }; +#if PARANOID_KERNEL_FREE struct slab_queue { slab_queue_link* head; slab_queue_link* tail; @@ -44,6 +47,29 @@ struct slab_queue { return item; } }; +#else /* LIFO queue */ +struct slab_queue { + slab_queue_link* head; + + void Init() + { + head = NULL; + } + + void Push(slab_queue_link* item) + { + item->next = head; + head = item; + } + + slab_queue_link* Pop() + { + slab_queue_link* item = head; + head = item->next; + return item; + } +}; +#endif #endif // SLAB_QUEUE_H