From 1fc8bb7142868bbeac5bcbbd489cd23347716203 Mon Sep 17 00:00:00 2001 From: 3gg <3gg@shellblade.net> Date: Mon, 30 Jun 2025 19:29:07 -0700 Subject: Fix: set num used blocks to 0 on clear --- mem/src/mem.c | 1 + mem/test/mem_test.c | 2 ++ mempool/src/mempool.c | 5 +++-- mempool/test/mempool_test.c | 8 +++++--- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/mem/src/mem.c b/mem/src/mem.c index c2af518..9169a9f 100644 --- a/mem/src/mem.c +++ b/mem/src/mem.c @@ -57,6 +57,7 @@ void mem_del_(Memory* mem) { void mem_clear_(Memory* mem) { assert(mem); + mem->num_used_blocks = 0; mem->next_free_chunk = 0; memset(mem->blocks, 0, mem->num_blocks * mem->block_size_bytes); memset(mem->chunks, 0, mem->num_blocks * sizeof(Chunk)); diff --git a/mem/test/mem_test.c b/mem/test/mem_test.c index 14718a5..88c8b14 100644 --- a/mem/test/mem_test.c +++ b/mem/test/mem_test.c @@ -220,6 +220,8 @@ TEST_CASE(mem_clear_then_reuse) { } mem_clear(&mem); + TEST_EQUAL(mem_size(&mem), 0); + TEST_EQUAL(mem_capacity(&mem), NUM_BLOCKS); // Allocate chunks and assign values 0..N. for (int i = 0; i < NUM_BLOCKS; ++i) { diff --git a/mempool/src/mempool.c b/mempool/src/mempool.c index 444d602..c398c4f 100644 --- a/mempool/src/mempool.c +++ b/mempool/src/mempool.c @@ -66,8 +66,9 @@ void mempool_del_(mempool* pool) { void mempool_clear_(mempool* pool) { assert(pool); - pool->head = 0; - pool->used = 0; + pool->head = 0; + pool->used = 0; + pool->num_used_blocks = 0; memset(pool->blocks, 0, pool->num_blocks * pool->block_size_bytes); memset(pool->block_info, 0, pool->num_blocks * sizeof(BlockInfo)); init_free_list(pool); diff --git a/mempool/test/mempool_test.c b/mempool/test/mempool_test.c index 843f7e7..4c55e4b 100644 --- a/mempool/test/mempool_test.c +++ b/mempool/test/mempool_test.c @@ -178,16 +178,18 @@ TEST_CASE(mem_clear_then_reuse) { // Allocate chunks, contents not important. for (int i = 0; i < NUM_BLOCKS; ++i) { - int* chunk = mempool_alloc(&mem); - TEST_TRUE(chunk != 0); + const int* chunk = mempool_alloc(&mem); + TEST_TRUE(chunk != nullptr); } mempool_clear(&mem); + TEST_EQUAL(mempool_size(&mem), 0); + TEST_EQUAL(mempool_capacity(&mem), NUM_BLOCKS); // Allocate chunks and assign values 0..N. for (int i = 0; i < NUM_BLOCKS; ++i) { int* chunk = mempool_alloc(&mem); - TEST_TRUE(chunk != 0); + TEST_TRUE(chunk != nullptr); *chunk = i + 1; } -- cgit v1.2.3