mirror of
https://github.com/odin-lang/Odin.git
synced 2026-01-04 12:07:45 +00:00
Add a mutex to virtual.Arena
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user