mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-03 14:18:47 +00:00
Merge branch 'master' into file-tags-without-comments
This commit is contained in:
@@ -3,17 +3,31 @@ package mem
|
||||
|
||||
import "core:sync"
|
||||
|
||||
/*
|
||||
The data for mutex allocator.
|
||||
*/
|
||||
Mutex_Allocator :: struct {
|
||||
backing: Allocator,
|
||||
mutex: sync.Mutex,
|
||||
}
|
||||
|
||||
/*
|
||||
Initialize the mutex allocator.
|
||||
|
||||
This procedure initializes the mutex allocator using `backin_allocator` as the
|
||||
allocator that will be used to pass all allocation requests through.
|
||||
*/
|
||||
mutex_allocator_init :: proc(m: ^Mutex_Allocator, backing_allocator: Allocator) {
|
||||
m.backing = backing_allocator
|
||||
m.mutex = {}
|
||||
}
|
||||
|
||||
/*
|
||||
Mutex allocator.
|
||||
|
||||
The mutex allocator is a wrapper for allocators that is used to serialize all
|
||||
allocator requests across multiple threads.
|
||||
*/
|
||||
@(require_results)
|
||||
mutex_allocator :: proc(m: ^Mutex_Allocator) -> Allocator {
|
||||
return Allocator{
|
||||
@@ -22,11 +36,16 @@ mutex_allocator :: proc(m: ^Mutex_Allocator) -> Allocator {
|
||||
}
|
||||
}
|
||||
|
||||
mutex_allocator_proc :: proc(allocator_data: rawptr, mode: Allocator_Mode,
|
||||
size, alignment: int,
|
||||
old_memory: rawptr, old_size: int, loc := #caller_location) -> (result: []byte, err: Allocator_Error) {
|
||||
mutex_allocator_proc :: proc(
|
||||
allocator_data: rawptr,
|
||||
mode: Allocator_Mode,
|
||||
size: int,
|
||||
alignment: int,
|
||||
old_memory: rawptr,
|
||||
old_size: int,
|
||||
loc := #caller_location,
|
||||
) -> (result: []byte, err: Allocator_Error) {
|
||||
m := (^Mutex_Allocator)(allocator_data)
|
||||
|
||||
sync.mutex_guard(&m.mutex)
|
||||
return m.backing.procedure(m.backing.data, mode, size, alignment, old_memory, old_size, loc)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user