diff arena.c @ 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 9f149f0e98b7
children 4b8ab2d82aee
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;