Add Leak Detection to Ona Heap Allocator #15
|
@ -9,22 +9,22 @@ const std = @import("std");
|
||||||
///
|
///
|
||||||
const stack_trace_frame_size = if (std.debug.sys_can_stack_trace) 16 else 0;
|
const stack_trace_frame_size = if (std.debug.sys_can_stack_trace) 16 else 0;
|
||||||
|
|
||||||
|
///
|
||||||
|
///
|
||||||
|
///
|
||||||
|
const AllocationInfo = struct {
|
||||||
|
stack_frames: [stack_trace_frame_size]usize,
|
||||||
|
stack_trace: std.builtin.StackTrace,
|
||||||
|
next_info: ?*AllocationInfo,
|
||||||
|
size: usize,
|
||||||
|
};
|
||||||
|
|
||||||
///
|
///
|
||||||
///
|
///
|
||||||
///
|
///
|
||||||
const Context = struct {
|
const Context = struct {
|
||||||
allocation_info_head: ?*AllocationInfo = null,
|
allocation_info_head: ?*AllocationInfo = null,
|
||||||
|
|
||||||
///
|
|
||||||
///
|
|
||||||
///
|
|
||||||
const AllocationInfo = struct {
|
|
||||||
stack_frames: [stack_trace_frame_size]usize,
|
|
||||||
stack_trace: std.builtin.StackTrace,
|
|
||||||
next_info: ?*AllocationInfo,
|
|
||||||
size: usize,
|
|
||||||
};
|
|
||||||
|
|
||||||
///
|
///
|
||||||
///
|
///
|
||||||
///
|
///
|
||||||
|
@ -167,7 +167,10 @@ pub fn trace_allocations() void {
|
||||||
var current_allocation_info = context.allocation_info_head;
|
var current_allocation_info = context.allocation_info_head;
|
||||||
|
|
||||||
while (current_allocation_info) |allocation_info| : (current_allocation_info = allocation_info.next_info) {
|
while (current_allocation_info) |allocation_info| : (current_allocation_info = allocation_info.next_info) {
|
||||||
std.debug.print("{d} byte leak detected", .{allocation_info.size});
|
std.debug.print("{d} byte leak at 0x{x} detected: {}", .{
|
||||||
std.debug.dumpStackTrace(allocation_info.stack_trace);
|
allocation_info.size,
|
||||||
|
@ptrToInt(allocation_info) + @sizeOf(AllocationInfo),
|
||||||
|
allocation_info.stack_trace
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue