changeset 1030:c7c573f0229e

Fixed a really egregious bug in the arena implementation. Not sure how this even worked at all before.
author Michael Pavone <pavone@retrodev.com>
date Sun, 15 May 2016 12:02:56 -0700
parents 4263dc9cf86d
children 219de1d64aa1
files arena.c
diffstat 1 files changed, 7 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/arena.c	Wed May 11 22:43:18 2016 -0700
+++ b/arena.c	Sun May 15 12:02:56 2016 -0700
@@ -17,6 +17,8 @@
 	size_t free_storage;
 };
 
+#define DEFAULT_STORAGE_SIZE 8
+
 static arena *current_arena;
 
 arena *get_current_arena()
@@ -45,7 +47,11 @@
 {
 	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;