aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author3gg <3gg@shellblade.net>2025-07-31 15:32:44 -0700
committer3gg <3gg@shellblade.net>2025-07-31 15:32:44 -0700
commit8bea2bac950f6716fbf26bcd2c718e048f77c9b7 (patch)
tree9625b0db3d309615d7ab9eccbe96d5b13f2860c5
parentb905c803f35ee41ed894a108cc8fa114a2a58b88 (diff)
Handle uninitialized pool. Pending test.HEADmain
-rw-r--r--mempool/src/mempool.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/mempool/src/mempool.c b/mempool/src/mempool.c
index c398c4f..bae4fc9 100644
--- a/mempool/src/mempool.c
+++ b/mempool/src/mempool.c
@@ -9,6 +9,7 @@
9/// All of the blocks in the pool are assumed free. 9/// All of the blocks in the pool are assumed free.
10static void init_free_list(mempool* pool) { 10static void init_free_list(mempool* pool) {
11 assert(pool); 11 assert(pool);
12 assert(pool->num_blocks > 0);
12 for (size_t i = 0; i < pool->num_blocks - 1; ++i) { 13 for (size_t i = 0; i < pool->num_blocks - 1; ++i) {
13 pool->block_info[i].next_free = i + 1; 14 pool->block_info[i].next_free = i + 1;
14 } 15 }
@@ -64,6 +65,7 @@ void mempool_del_(mempool* pool) {
64 } 65 }
65} 66}
66 67
68// TODO: Add a unit test for clearing a pool that has not been initialized.
67void mempool_clear_(mempool* pool) { 69void mempool_clear_(mempool* pool) {
68 assert(pool); 70 assert(pool);
69 pool->head = 0; 71 pool->head = 0;
@@ -71,7 +73,9 @@ void mempool_clear_(mempool* pool) {
71 pool->num_used_blocks = 0; 73 pool->num_used_blocks = 0;
72 memset(pool->blocks, 0, pool->num_blocks * pool->block_size_bytes); 74 memset(pool->blocks, 0, pool->num_blocks * pool->block_size_bytes);
73 memset(pool->block_info, 0, pool->num_blocks * sizeof(BlockInfo)); 75 memset(pool->block_info, 0, pool->num_blocks * sizeof(BlockInfo));
74 init_free_list(pool); 76 if (pool->num_blocks > 0) {
77 init_free_list(pool);
78 }
75} 79}
76 80
77void* mempool_alloc_(mempool* pool) { 81void* mempool_alloc_(mempool* pool) {