From efdd5cf49944ece647e6f9b9cbbde10440a20afc Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 29 Sep 2021 16:43:58 +0100 Subject: [PATCH] Add a mutex to virtual.Arena --- core/mem/virtual/arena.odin | 13 +++++++++++++ 1 file changed, 13 insertions(+) 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 }