mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-04 14:48:47 +00:00
Add a mutex to virtual.Arena
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
package mem_virtual
|
package mem_virtual
|
||||||
|
|
||||||
import "core:mem"
|
import "core:mem"
|
||||||
|
import sync "core:sync/sync2"
|
||||||
|
|
||||||
Arena :: struct {
|
Arena :: struct {
|
||||||
curr_block: ^Memory_Block,
|
curr_block: ^Memory_Block,
|
||||||
@@ -8,6 +9,9 @@ Arena :: struct {
|
|||||||
total_allocated: int,
|
total_allocated: int,
|
||||||
|
|
||||||
minimum_block_size: int,
|
minimum_block_size: int,
|
||||||
|
|
||||||
|
ignore_mutex: bool,
|
||||||
|
mutex: sync.Mutex,
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFAULT_MINIMUM_BLOCK_SIZE :: 8*1024*1024
|
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)))
|
assert(mem.is_power_of_two(uintptr(alignment)))
|
||||||
|
|
||||||
|
mutex := &arena.mutex
|
||||||
|
if !arena.ignore_mutex {
|
||||||
|
sync.mutex_lock(mutex)
|
||||||
|
}
|
||||||
|
|
||||||
size := 0
|
size := 0
|
||||||
if arena.curr_block != nil {
|
if arena.curr_block != nil {
|
||||||
size = min_size + align_forward_offset(arena, alignment)
|
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)
|
assert(curr_block.used <= curr_block.size)
|
||||||
arena.total_used += size
|
arena.total_used += size
|
||||||
|
|
||||||
|
if !arena.ignore_mutex {
|
||||||
|
sync.mutex_unlock(mutex)
|
||||||
|
}
|
||||||
|
|
||||||
return ptr[:min_size], nil
|
return ptr[:min_size], nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user