diff options
| author | gingerBill <bill@gingerbill.org> | 2021-09-29 16:43:58 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2021-09-29 16:43:58 +0100 |
| commit | efdd5cf49944ece647e6f9b9cbbde10440a20afc (patch) | |
| tree | fbf98b285bffcce27729f50b64cfbd255733623a | |
| parent | 805e48ae1eeae5d3d4e5835f0ff9c0b8803365e9 (diff) | |
Add a mutex to virtual.Arena
| -rw-r--r-- | core/mem/virtual/arena.odin | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/core/mem/virtual/arena.odin b/core/mem/virtual/arena.odin index a9e77c65e..3a6fe51b2 100644 --- a/core/mem/virtual/arena.odin +++ b/core/mem/virtual/arena.odin @@ -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 } |