I dunno why this works but it does for some miraculous reason
This commit is contained in:
parent
e0f0bb0713
commit
bd957d1c79
2 changed files with 20 additions and 4 deletions
|
|
@ -83,8 +83,19 @@ void arena_deinit(Arena *arena) {
|
|||
return;
|
||||
}
|
||||
|
||||
// Now that we have no descendants tell our parent of our death
|
||||
arena->parent->child = arena->sibling;
|
||||
// Now that we have no descendants tell our parent and siblings of our death
|
||||
if (arena->parent->child == arena) {
|
||||
arena->parent->child = arena->sibling;
|
||||
return;
|
||||
}
|
||||
|
||||
Arena *previous_sibling = arena->parent->child;
|
||||
while (previous_sibling != NULL && previous_sibling->sibling != arena) {
|
||||
previous_sibling = previous_sibling->sibling;
|
||||
}
|
||||
if (previous_sibling != NULL) {
|
||||
previous_sibling->sibling = arena->sibling;
|
||||
}
|
||||
}
|
||||
|
||||
void *arena_alloc(Arena *arena, size_t size) {
|
||||
|
|
|
|||
|
|
@ -26,9 +26,14 @@ int main(int argc, char *argv[]) {
|
|||
Arena *sibling_arena = arena_init(global_arena, 0);
|
||||
Arena *grandchild_arena = arena_init(child_arena, 0);
|
||||
Arena *greatgrandchild_arena = arena_init(grandchild_arena, 0);
|
||||
Arena *greategreatgrandchild_arena = arena_init(greatgrandchild_arena, 0);
|
||||
Arena *greatgrandchildsibling_arena = arena_init(grandchild_arena, 0);
|
||||
Arena *greatgrandchildsiblingsibling_arena = arena_init(grandchild_arena, 0);
|
||||
Arena *greategreatgrandchild_arena =
|
||||
arena_init(greatgrandchildsibling_arena, 0);
|
||||
Arena *greatsiblinggreatgrandchild_arena =
|
||||
arena_init(greatgrandchildsiblingsibling_arena, 0);
|
||||
|
||||
printf("deinit test\n");
|
||||
printf("deinit tests\n");
|
||||
arena_deinit(greatgrandchild_arena);
|
||||
|
||||
arena_deinit(global_arena);
|
||||
|
|
|
|||
Loading…
Reference in a new issue