aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2021-09-29 16:43:58 +0100
committergingerBill <bill@gingerbill.org>2021-09-29 16:43:58 +0100
commitefdd5cf49944ece647e6f9b9cbbde10440a20afc (patch)
treefbf98b285bffcce27729f50b64cfbd255733623a
parent805e48ae1eeae5d3d4e5835f0ff9c0b8803365e9 (diff)
Add a mutex to virtual.Arena
-rw-r--r--core/mem/virtual/arena.odin13
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
}