diff options
| author | gingerBill <bill@gingerbill.org> | 2021-08-27 11:18:38 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2021-08-27 11:18:38 +0100 |
| commit | 582559f7ac54b62cbdccf6f396f072b15a950664 (patch) | |
| tree | 987c4d69ebf5aa2e8d5be414f49666fbbfa42daa /src/common_memory.cpp | |
| parent | 53556d9bd261272137256af9a5716dc26453337b (diff) | |
Correct did you mean logic and make thread-safe-er
Diffstat (limited to 'src/common_memory.cpp')
| -rw-r--r-- | src/common_memory.cpp | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/src/common_memory.cpp b/src/common_memory.cpp index dfc86b5f3..8d1161f25 100644 --- a/src/common_memory.cpp +++ b/src/common_memory.cpp @@ -57,8 +57,8 @@ struct MemoryBlock { }; struct Arena { - MemoryBlock * curr_block; - isize minimum_block_size; + MemoryBlock *curr_block; + isize minimum_block_size; bool use_local_mutex; BlockingMutex local_mutex; }; @@ -69,8 +69,14 @@ gb_global isize DEFAULT_PAGE_SIZE = 4096; MemoryBlock *virtual_memory_alloc(isize size); void virtual_memory_dealloc(MemoryBlock *block); +void *arena_alloc(Arena *arena, isize min_size, isize alignment); void arena_free_all(Arena *arena); +void arena_init_local_mutex(Arena *arena) { + mutex_init(&arena->local_mutex); + arena->use_local_mutex = true; +} + isize arena_align_forward_offset(Arena *arena, isize alignment) { isize alignment_offset = 0; isize ptr = cast(isize)(arena->curr_block->base + arena->curr_block->used); @@ -81,17 +87,9 @@ isize arena_align_forward_offset(Arena *arena, isize alignment) { return alignment_offset; } -void arena_init_local_mutex(Arena *arena) { - mutex_init(&arena->local_mutex); - arena->use_local_mutex = true; -} - - - void *arena_alloc(Arena *arena, isize min_size, isize alignment) { GB_ASSERT(gb_is_power_of_two(alignment)); - BlockingMutex *mutex = &global_memory_allocator_mutex; if (arena->use_local_mutex) { mutex = &arena->local_mutex; @@ -289,6 +287,7 @@ GB_ALLOCATOR_PROC(arena_allocator_proc) { } break; case gbAllocation_FreeAll: + GB_PANIC("use arena_free_all directly"); arena_free_all(arena); break; } |