summaryrefslogtreecommitdiff
path: root/crates/alloc_buddy/src/lib.rs
diff options
context:
space:
mode:
authorNathan Ringo <nathan@remexre.com>2024-09-01 13:33:31 -0500
committerNathan Ringo <nathan@remexre.com>2024-09-01 13:33:31 -0500
commitbdc5f0702a85fa2b8c84c12a78afee95915be4ab (patch)
tree0a4b3b413676f82b385c1e64fa76372260096bb0 /crates/alloc_buddy/src/lib.rs
parenta83d2e1c8bf968d948991869d1f082b610d9032a (diff)
Fix a bitset indexing bug, change a panic to be more informative.
Diffstat (limited to 'crates/alloc_buddy/src/lib.rs')
-rw-r--r--crates/alloc_buddy/src/lib.rs16
1 files changed, 11 insertions, 5 deletions
diff --git a/crates/alloc_buddy/src/lib.rs b/crates/alloc_buddy/src/lib.rs
index d0d4818..fc5d17e 100644
--- a/crates/alloc_buddy/src/lib.rs
+++ b/crates/alloc_buddy/src/lib.rs
@@ -44,12 +44,12 @@
extern crate std; // TODO: Remove me
-mod bitvec;
+mod bitset;
mod free_list;
mod tree;
use crate::{
- bitvec::{Bitset, SubregionStatus},
+ bitset::{Bitset, SubregionStatus},
free_list::{FreeList, FreeListNode},
tree::Tree,
};
@@ -230,7 +230,9 @@ impl<
unsafe { free_list.push(tree.base_ptr.unwrap().cast()) };
// Then, set a bit in the bitset to say that this region is present.
- tree.bitset_mark_as_present(bitset, tree.size_class, 0);
+ let Ok(()) = tree.bitset_mark_as_present(bitset, tree.size_class, 0) else {
+ panic!("the first bit was already set in {tree:#?}\nbitset = {bitset:?}")
+ };
}
}
@@ -253,7 +255,9 @@ impl<
let tree = &mut self.trees[tree_index];
// Mark the pointer as no longer being in the tree.
- tree.bitset_mark_as_absent(&mut self.bitset, size_class, offset);
+ let Ok(()) = tree.bitset_mark_as_absent(self.bitset, size_class, offset) else {
+ panic!("the bit for tree {tree_index}, offset {offset} was not set in {self:#?}")
+ };
// Return the pointer.
Ok(ptr)
@@ -289,7 +293,9 @@ impl<
}
// Mark the pointer as being in the tree.
- tree.bitset_mark_as_present(&mut self.bitset, size_class, offset);
+ let Ok(()) = tree.bitset_mark_as_present(self.bitset, size_class, offset) else {
+ panic!("the bit for tree {tree_index}, offset {offset} was already set in {self:#?}")
+ };
// Return the pointer to the appropriate free list.
self.free_list(size_class).push(ptr);