slab: remove magazines from lists in depot_destroy()
This never worked - if there were any magazines, we'd keep on looping
until we crashed. It'd be nice if there was a BSD SLIST_POP_FIRST() or
something.
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
diff --git a/kern/src/slab.c b/kern/src/slab.c
index 86411fb..fecffcd 100644
--- a/kern/src/slab.c
+++ b/kern/src/slab.c
@@ -414,11 +414,15 @@
lock_depot(depot);
while ((mag_i = SLIST_FIRST(&depot->not_empty))) {
+ SLIST_REMOVE_HEAD(&depot->not_empty, link);
drain_mag(kc, mag_i);
kmem_cache_free(kmem_magazine_cache, mag_i);
}
- while ((mag_i = SLIST_FIRST(&depot->empty)))
+ while ((mag_i = SLIST_FIRST(&depot->empty))) {
+ SLIST_REMOVE_HEAD(&depot->empty, link);
+ assert(mag_i->nr_rounds == 0);
kmem_cache_free(kmem_magazine_cache, mag_i);
+ }
unlock_depot(depot);
}