aboutsummaryrefslogtreecommitdiff
path: root/src/common_memory.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2023-01-23 11:38:18 +0000
committergingerBill <bill@gingerbill.org>2023-01-23 11:38:18 +0000
commit55176e52fcb977268625cfc7f7afaaaa6bf5d06f (patch)
tree7727aaff0d9516785709fe86da7bdd6a251847a6 /src/common_memory.cpp
parent4eb08bb0967b1a184c9e5453d20dc187777317ba (diff)
Use `heap_allocator()` with `-debug`; Reinstate the arena guards
Diffstat (limited to 'src/common_memory.cpp')
-rw-r--r--src/common_memory.cpp23
1 files changed, 15 insertions, 8 deletions
diff --git a/src/common_memory.cpp b/src/common_memory.cpp
index e07276aa1..07c3ba48f 100644
--- a/src/common_memory.cpp
+++ b/src/common_memory.cpp
@@ -254,6 +254,8 @@ struct ArenaTemp {
ArenaTemp arena_temp_begin(Arena *arena) {
GB_ASSERT(arena);
+ MUTEX_GUARD(&arena->mutex);
+
ArenaTemp temp = {};
temp.arena = arena;
temp.block = arena->curr_block;
@@ -267,6 +269,8 @@ ArenaTemp arena_temp_begin(Arena *arena) {
void arena_temp_end(ArenaTemp const &temp) {
GB_ASSERT(temp.arena);
Arena *arena = temp.arena;
+ MUTEX_GUARD(&arena->mutex);
+
bool memory_block_found = false;
for (MemoryBlock *block = arena->curr_block; block != nullptr; block = block->prev) {
if (block == temp.block) {
@@ -359,23 +363,26 @@ gb_internal gbAllocator temporary_allocator() {
return arena_allocator(&temporary_arena);
}
-#define TEMPORARY_ALLOCATOR_GUARD()
-#define PERMANENT_ALLOCATOR_GUARD()
+// #define TEMPORARY_ALLOCATOR_GUARD()
+// #define PERMANENT_ALLOCATOR_GUARD()
-// #define TEMPORARY_ALLOCATOR_GUARD() ArenaTempGuard GB_DEFER_3(_arena_guard_){&temporary_arena}
-// #define PERMANENT_ALLOCATOR_GUARD() ArenaTempGuard GB_DEFER_3(_arena_guard_){&permanent_arena}
+#define TEMPORARY_ALLOCATOR_GUARD() ArenaTempGuard GB_DEFER_3(_arena_guard_){&temporary_arena}
+#define PERMANENT_ALLOCATOR_GUARD() ArenaTempGuard GB_DEFER_3(_arena_guard_){&permanent_arena}
+gb_internal bool IS_ODIN_DEBUG(void);
gb_internal GB_ALLOCATOR_PROC(heap_allocator_proc);
gb_internal gbAllocator heap_allocator(void) {
+ if (IS_ODIN_DEBUG()) {
+ gbAllocator a;
+ a.proc = heap_allocator_proc;
+ a.data = nullptr;
+ return a;
+ }
return arena_allocator(&permanent_arena);
- // gbAllocator a;
- // a.proc = heap_allocator_proc;
- // a.data = nullptr;
- // return a;
}