aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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) {