Mercurial > repos > blastem
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 |