fix free block check and remove unused free_size field

This commit is contained in:
Nikita Smith
2025-09-08 16:07:31 -07:00
committed by Ryan Fleury
parent 8f749f4239
commit 082f6cf6fd
2 changed files with 13 additions and 16 deletions
+13 -15
View File
@@ -62,7 +62,6 @@ arena_alloc_(ArenaParams *params)
arena->allocation_site_file = params->allocation_site_file; arena->allocation_site_file = params->allocation_site_file;
arena->allocation_site_line = params->allocation_site_line; arena->allocation_site_line = params->allocation_site_line;
#if ARENA_FREE_LIST #if ARENA_FREE_LIST
arena->free_size = 0;
arena->free_last = 0; arena->free_last = 0;
#endif #endif
AsanPoisonMemoryRegion(base, commit_size); AsanPoisonMemoryRegion(base, commit_size);
@@ -95,22 +94,22 @@ arena_push(Arena *arena, U64 size, U64 align, B32 zero)
Arena *new_block = 0; Arena *new_block = 0;
#if ARENA_FREE_LIST #if ARENA_FREE_LIST
Arena *prev_block;
for(new_block = arena->free_last, prev_block = 0; new_block != 0; prev_block = new_block, new_block = new_block->prev)
{ {
if(new_block->res >= AlignPow2(size, align)) Arena *prev_block;
for(new_block = arena->free_last, prev_block = 0; new_block != 0; prev_block = new_block, new_block = new_block->prev)
{ {
if(prev_block) if(new_block->res >= AlignPow2(new_block->pos, align) + size)
{ {
prev_block->prev = new_block->prev; if(prev_block)
{
prev_block->prev = new_block->prev;
}
else
{
arena->free_last = new_block->prev;
}
break;
} }
else
{
arena->free_last = new_block->prev;
}
arena->free_size -= new_block->res_size;
AsanUnpoisonMemoryRegion((U8*)new_block + ARENA_HEADER_SIZE, new_block->res_size - ARENA_HEADER_SIZE);
break;
} }
} }
#endif #endif
@@ -209,9 +208,8 @@ arena_pop_to(Arena *arena, U64 pos)
{ {
prev = current->prev; prev = current->prev;
current->pos = ARENA_HEADER_SIZE; current->pos = ARENA_HEADER_SIZE;
arena->free_size += current->res_size;
SLLStackPush_N(arena->free_last, current, prev); SLLStackPush_N(arena->free_last, current, prev);
AsanPoisonMemoryRegion((U8*)current + ARENA_HEADER_SIZE, current->res_size - ARENA_HEADER_SIZE); AsanPoisonMemoryRegion((U8*)current + ARENA_HEADER_SIZE, current->res - ARENA_HEADER_SIZE);
} }
#else #else
for(Arena *prev = 0; current->base_pos >= big_pos; current = prev) for(Arena *prev = 0; current->base_pos >= big_pos; current = prev)
-1
View File
@@ -42,7 +42,6 @@ struct Arena
char *allocation_site_file; char *allocation_site_file;
int allocation_site_line; int allocation_site_line;
#if ARENA_FREE_LIST #if ARENA_FREE_LIST
U64 free_size;
Arena *free_last; Arena *free_last;
#endif #endif
}; };