Browse Source

Add a mutex to virtual.Arena

gingerBill 3 years ago
parent
commit
efdd5cf499
1 changed files with 13 additions and 0 deletions
  1. 13 0
      core/mem/virtual/arena.odin

+ 13 - 0
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
 }