comparison 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
comparison
equal deleted inserted replaced
1029:4263dc9cf86d 1030:c7c573f0229e
14 size_t used_count; 14 size_t used_count;
15 size_t used_storage; 15 size_t used_storage;
16 size_t free_count; 16 size_t free_count;
17 size_t free_storage; 17 size_t free_storage;
18 }; 18 };
19
20 #define DEFAULT_STORAGE_SIZE 8
19 21
20 static arena *current_arena; 22 static arena *current_arena;
21 23
22 arena *get_current_arena() 24 arena *get_current_arena()
23 { 25 {
43 45
44 void track_block(void *block) 46 void track_block(void *block)
45 { 47 {
46 arena *cur = get_current_arena(); 48 arena *cur = get_current_arena();
47 if (cur->used_count == cur->used_storage) { 49 if (cur->used_count == cur->used_storage) {
48 cur->used_storage *= 2; 50 if (cur->used_storage) {
51 cur->used_storage *= 2;
52 } else {
53 cur->used_storage = DEFAULT_STORAGE_SIZE;
54 }
49 cur->used_blocks = realloc(cur->used_blocks, cur->used_storage * sizeof(void *)); 55 cur->used_blocks = realloc(cur->used_blocks, cur->used_storage * sizeof(void *));
50 } 56 }
51 cur->used_blocks[cur->used_count++] = block; 57 cur->used_blocks[cur->used_count++] = block;
52 } 58 }
53 59