From 8bf0b4eebf5d06a4daefefcf3d6dd7491c2cd1f9 Mon Sep 17 00:00:00 2001 From: Michael Pavone Date: Sun, 15 May 2016 12:02:56 -0700 Subject: Fixed a really egregious bug in the arena implementation. Not sure how this even worked at all before. --- arena.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'arena.c') diff --git a/arena.c b/arena.c index 6bc50e0..50a5594 100644 --- a/arena.c +++ b/arena.c @@ -17,6 +17,8 @@ struct arena { size_t free_storage; }; +#define DEFAULT_STORAGE_SIZE 8 + static arena *current_arena; arena *get_current_arena() @@ -45,7 +47,11 @@ void track_block(void *block) { arena *cur = get_current_arena(); if (cur->used_count == cur->used_storage) { - cur->used_storage *= 2; + if (cur->used_storage) { + cur->used_storage *= 2; + } else { + cur->used_storage = DEFAULT_STORAGE_SIZE; + } cur->used_blocks = realloc(cur->used_blocks, cur->used_storage * sizeof(void *)); } cur->used_blocks[cur->used_count++] = block; -- cgit v1.2.3