Remove need for allocator and MAX_FRAMES in trace.frames

This commit is contained in:
gingerBill
2024-04-28 13:05:19 +01:00
parent be09584ea5
commit c0b7dd7da6
3 changed files with 16 additions and 18 deletions
+9 -8
View File
@@ -2,6 +2,7 @@
//+build linux
package debug_trace
import "base:intrinsics"
import "base:runtime"
import "core:strings"
import "core:fmt"
@@ -92,17 +93,16 @@ _destroy :: proc(ctx: ^Context) -> bool {
}
@(private="package")
_frames :: proc(ctx: ^Context, skip: uint, allocator: runtime.Allocator) -> (frames: []Frame) {
_frames :: proc "contextless" (ctx: ^Context, skip: uint, frames_buffer: []Frame) -> (frames: []Frame) {
Backtrace_Context :: struct {
ctx: ^Context,
rt_ctx: runtime.Context,
frames: [MAX_FRAMES]Frame,
frames: []Frame,
frame_count: int,
}
btc := &Backtrace_Context{
ctx = ctx,
rt_ctx = context,
frames = frames_buffer,
}
backtrace_simple(
ctx.impl.state,
@@ -113,6 +113,9 @@ _frames :: proc(ctx: ^Context, skip: uint, allocator: runtime.Allocator) -> (fra
if address == 0 {
return 1
}
if btc.frame_count == len(btc.frames) {
return 1
}
btc.frames[btc.frame_count] = address
btc.frame_count += 1
return 0
@@ -121,10 +124,8 @@ _frames :: proc(ctx: ^Context, skip: uint, allocator: runtime.Allocator) -> (fra
btc,
)
res := btc.frames[:btc.frame_count]
if len(res) > 0 {
frames = make([]Frame, btc.frame_count, allocator)
copy(frames, res)
if btc.frame_count > 0 {
frames = btc.frames[:btc.frame_count]
}
return
}