From a0c20023fc87e0cbd2a2316a2eb993edf67815cf Mon Sep 17 00:00:00 2001 From: alektron Date: Wed, 15 Jan 2025 17:59:30 +0100 Subject: [PATCH] Fix: Issue with non-zeroed memory after arena_temp_and; Fix: total_used field of growing Arena was not decremented correctly in arena_temp_end; --- base/runtime/default_temp_allocator_arena.odin | 3 ++- core/mem/virtual/arena.odin | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/base/runtime/default_temp_allocator_arena.odin b/base/runtime/default_temp_allocator_arena.odin index db157b267..878a2d070 100644 --- a/base/runtime/default_temp_allocator_arena.odin +++ b/base/runtime/default_temp_allocator_arena.odin @@ -282,9 +282,10 @@ arena_temp_end :: proc(temp: Arena_Temp, loc := #caller_location) { if block := arena.curr_block; block != nil { assert(block.used >= temp.used, "out of order use of arena_temp_end", loc) - amount_to_zero := min(block.used-temp.used, block.capacity-block.used) + amount_to_zero := block.used-temp.used intrinsics.mem_zero(block.base[temp.used:], amount_to_zero) block.used = temp.used + arena.total_used -= amount_to_zero } } diff --git a/core/mem/virtual/arena.odin b/core/mem/virtual/arena.odin index 4a0fff241..675558ec8 100644 --- a/core/mem/virtual/arena.odin +++ b/core/mem/virtual/arena.odin @@ -402,9 +402,10 @@ arena_temp_end :: proc(temp: Arena_Temp, loc := #caller_location) { if block := arena.curr_block; block != nil { assert(block.used >= temp.used, "out of order use of arena_temp_end", loc) - amount_to_zero := min(block.used-temp.used, block.reserved-block.used) + amount_to_zero := block.used-temp.used mem.zero_slice(block.base[temp.used:][:amount_to_zero]) block.used = temp.used + arena.total_used -= amount_to_zero } }