summaryrefslogtreecommitdiff
path: root/test/pkmem.cpp
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2025-06-05 00:51:35 -0400
committerJonathan Bradley <jcb@pikum.xyz>2025-06-05 09:59:02 -0400
commit053b5ab41a7747f83b25906ea46446eba8c6ea9a (patch)
treed244e72365d1c222182dad6d8f21c68d6ef89536 /test/pkmem.cpp
parent54c3fbaaf3e10c4b9aa15f3d32864b0ebfc06eee (diff)
pkmem: handle accessing uninitialized debug blocks
Diffstat (limited to 'test/pkmem.cpp')
-rw-r--r--test/pkmem.cpp26
1 files changed, 23 insertions, 3 deletions
diff --git a/test/pkmem.cpp b/test/pkmem.cpp
index 3a2b425..52b393b 100644
--- a/test/pkmem.cpp
+++ b/test/pkmem.cpp
@@ -71,7 +71,7 @@ class FreeTest01 : public FreeTest {
[19-31] (13) memblock
[ 32 ] ( 1) ptr2
[33-63] (31) memblock
- [ 64 ] ( 1) ptr2
+ [ 64 ] ( 1) ptr1
[ 65 ] ( 0) HEAD
*/
class FreeTest02 : public FreeTest {
@@ -455,12 +455,16 @@ int main(int argc, char *argv[])
FreeTest02 ft{};
ft.ensureState();
+ pk_mem_assert(3 == ft.bkt->alloc_count);
+ pk_mem_assert(3 == ft.bkt->debug_head_l);
+ pk_mem_assert(3 == ft.bkt->debug_head_r);
+
/* fill everything, then allocate [65], moving HEAD
[00-18] (19) ptr0
[19-31] (13) ptr3
[ 32 ] ( 1) ptr2
[33-63] (31) ptr4
- [ 64 ] ( 1) ptr2
+ [ 64 ] ( 1) ptr1
[ 65 ] ( 1) ptr5
[ 66 ] ( 0) HEAD
*/
@@ -468,6 +472,10 @@ int main(int argc, char *argv[])
void *ptr4 = pk_new(31, 1, ft.bkt);
void *ptr5 = pk_new( 1, 1, ft.bkt);
+ pk_mem_assert(6 == ft.bkt->alloc_count);
+ pk_mem_assert(6 == ft.bkt->debug_head_l);
+ pk_mem_assert(6 == ft.bkt->debug_head_r);
+
fprintf(stdout, "block_head_r: %u\n", ft.bkt->block_head_r);
pk_mem_assert(0 == ft.bkt->block_head_r);
fprintf(stdout, "head : %li\n", ft.bkt->head);
@@ -491,13 +499,17 @@ int main(int argc, char *argv[])
[19-31] (13) memblock
[ 32 ] ( 1) ptr2
[33-63] (31) ptr4
- [ 64 ] ( 1) ptr2
+ [ 64 ] ( 1) ptr1
[ 65 ] ( 0) ptr5
[ 66 ] ( 0) HEAD
*/
pk_delete(ptr3, 13, ft.bkt);
ptr3 = nullptr;
+ pk_mem_assert(5 == ft.bkt->alloc_count);
+ pk_mem_assert(3 == ft.bkt->debug_head_l);
+ pk_mem_assert(6 == ft.bkt->debug_head_r);
+
fprintf(stdout, "block_head_r: %u\n", ft.bkt->block_head_r);
pk_mem_assert(1 == ft.bkt->block_head_r);
fprintf(stdout, "head : %li\n", ft.bkt->head);
@@ -522,12 +534,20 @@ int main(int argc, char *argv[])
pk_mem_assert(13 == ft.bkt->blocks[15].size);
/* free [32] which gets absorbed into 19-32
+ [00-18] (19) ptr0
[19-32] (13) memblock
[33-63] (31) ptr4
+ [ 64 ] ( 1) ptr1
+ [ 65 ] ( 0) ptr5
+ [ 66 ] ( 0) HEAD
*/
pk_delete(ft.ptrs[2], ft.sz[2], ft.bkt);
ft.ptrs[2] = nullptr;
+ pk_mem_assert(4 == ft.bkt->alloc_count);
+ pk_mem_assert(2 == ft.bkt->debug_head_l);
+ pk_mem_assert(6 == ft.bkt->debug_head_r);
+
fprintf(stdout, "block_head_r: %u\n", ft.bkt->block_head_r);
pk_mem_assert(1 == ft.bkt->block_head_r);
fprintf(stdout, "head : %li\n", ft.bkt->head);