Browse Source

Add `mem.Mutex_Allocator`

gingerBill 1 year ago
parent
commit
0f5328973e
1 changed files with 33 additions and 0 deletions
  1. 33 0
      core/mem/mutex_allocator.odin

+ 33 - 0
core/mem/mutex_allocator.odin

@@ -0,0 +1,33 @@
+//+build !freestanding
+package mem
+
+import "core:sync"
+
+Mutex_allocator :: struct {
+	backing: Allocator,
+	mutex:   sync.Mutex,
+}
+
+mutex_allocator_init :: proc(m: ^Mutex_allocator, backing_allocator: Allocator) {
+	m.backing = backing_allocator
+	m.mutex = {}
+}
+
+
+@(require_results)
+mutex_allocator :: proc(m: ^Mutex_allocator) -> Allocator {
+	return Allocator{
+		procedure = mutex_allocator_proc,
+		data = m,
+	}
+}
+
+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) {
+	m := (^Mutex_allocator)(allocator_data)
+
+	sync.mutex_guard(&m.mutex)
+	return m.backing.procedure(allocator_data, mode, size, alignment, old_memory, old_size, loc)
+}
+