diff --git a/source/ona/heap.zig b/source/ona/heap.zig index 4d32118..b6a28f9 100644 --- a/source/ona/heap.zig +++ b/source/ona/heap.zig @@ -7,7 +7,7 @@ const ext = @import("./ext.zig"); const std = @import("std"); /// -/// +/// Recorded allocation info state. /// const AllocationInfo = struct { trace: AllocationTrace, @@ -16,7 +16,9 @@ const AllocationInfo = struct { }; /// +/// Recorded stack trace of allocation call site. /// +/// *Note* this structure is reduced to zero bytes in released builds optimized for speed or size. /// const AllocationTrace = std.debug.ConfigurableTrace(2, 4, switch (builtin.mode) { .Debug, .ReleaseSafe => true, @@ -24,7 +26,7 @@ const AllocationTrace = std.debug.ConfigurableTrace(2, 4, switch (builtin.mode) }); /// -/// +/// Heap allocation context. /// const Context = struct { allocation_info_head: ?*AllocationInfo = null, @@ -69,7 +71,7 @@ const Context = struct { } /// - /// + /// Returns the assumed pointer to the [AllocationInfo] address of `allocation`. /// fn allocation_info_of(allocation: [*]u8) *AllocationInfo { return @intToPtr(*AllocationInfo, @ptrToInt(allocation) - @sizeOf(AllocationInfo)); @@ -159,9 +161,12 @@ const Context = struct { if (target_allocation_info == allocation_info_head) { self.allocation_info_head = allocation_info_head.next_info; - return @ptrCast([*]u8, ext.SDL_realloc(target_allocation_info, size) orelse { - return null; - })[allocation_info_size .. allocation_info_size + size]; + const allocation_address = ext.SDL_realloc(target_allocation_info, size) orelse return null; + + target_allocation_info.size = size; + + return @ptrCast([*]u8, allocation_address)[ + allocation_info_size .. (allocation_info_size + size)]; } var previous_allocation_info = allocation_info_head; @@ -171,9 +176,12 @@ const Context = struct { if (allocation_info == target_allocation_info) { previous_allocation_info.next_info = allocation_info.next_info; - return @ptrCast([*]u8, ext.SDL_realloc(target_allocation_info, size) orelse { - return null; - })[allocation_info_size .. allocation_info_size + size]; + const allocation_address = ext.SDL_realloc(target_allocation_info, size) orelse return null; + + target_allocation_info.size = size; + + return @ptrCast([*]u8, allocation_address)[ + allocation_info_size .. (allocation_info_size + size)]; } previous_allocation_info = allocation_info;