Browse Source

Merge pull request #4696 from alektron/ArenaBug

Non-zeroed memory after Arena free
gingerBill 7 months ago
parent
commit
328d70e244
2 changed files with 4 additions and 2 deletions
  1. 2 1
      base/runtime/default_temp_allocator_arena.odin
  2. 2 1
      core/mem/virtual/arena.odin

+ 2 - 1
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
 		}
 	}
 

+ 2 - 1
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
 		}
 	}