Add a mutex to virtual.Arena

This commit is contained in:
gingerBill
2021-09-29 16:43:58 +01:00
parent 805e48ae1e
commit efdd5cf499

View File

@@ -1,6 +1,7 @@
package mem_virtual
import "core:mem"
import sync "core:sync/sync2"
Arena :: struct {
curr_block: ^Memory_Block,
@@ -8,6 +9,9 @@ Arena :: struct {
total_allocated: int,
minimum_block_size: int,
ignore_mutex: bool,
mutex: sync.Mutex,
}
DEFAULT_MINIMUM_BLOCK_SIZE :: 8*1024*1024
@@ -26,6 +30,11 @@ arena_alloc :: proc(arena: ^Arena, min_size: int, alignment: int) -> (data: []by
assert(mem.is_power_of_two(uintptr(alignment)))
mutex := &arena.mutex
if !arena.ignore_mutex {
sync.mutex_lock(mutex)
}
size := 0
if arena.curr_block != nil {
size = min_size + align_forward_offset(arena, alignment)
@@ -53,6 +62,10 @@ arena_alloc :: proc(arena: ^Arena, min_size: int, alignment: int) -> (data: []by
assert(curr_block.used <= curr_block.size)
arena.total_used += size
if !arena.ignore_mutex {
sync.mutex_unlock(mutex)
}
return ptr[:min_size], nil
}