From 224df08d5ffab889d3cf73b839b2dd99161a4ed3 Mon Sep 17 00:00:00 2001 From: Patrick Cleaveliln Date: Thu, 10 Jul 2025 01:56:26 +0000 Subject: [PATCH] fix memory leak --- src/panels/panels.odin | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/panels/panels.odin b/src/panels/panels.odin index 31ec700..b975972 100644 --- a/src/panels/panels.odin +++ b/src/panels/panels.odin @@ -38,14 +38,16 @@ RS_GrepResult :: struct { @(private) rs_grep_as_results :: proc(results: ^RS_GrepResults, allocator := context.allocator) -> []core.GrepQueryResult { + context.allocator = allocator + query_results := make([]core.GrepQueryResult, results.len) for i in 0.. core.Panel { make_grep_panel :: proc(state: ^core.State) -> core.Panel { query_arena: mem.Arena - mem.arena_init(&query_arena, make([]u8, 1024*1024)) + mem.arena_init(&query_arena, make([]u8, 1024*1024, state.ctx.allocator)) input_map := core.new_input_map() grep_input_buffer := core.new_virtual_file_buffer(context.allocator) @@ -225,12 +227,14 @@ make_grep_panel :: proc(state: ^core.State) -> core.Panel { mem.arena_free_all(&panel_state.query_arena) panel_state.query_results = nil + context.allocator = mem.arena_allocator(&panel_state.query_arena) + rs_results := grep( strings.clone_to_cstring(query, allocator = context.temp_allocator), strings.clone_to_cstring(directory, allocator = context.temp_allocator) ); - panel_state.query_results = rs_grep_as_results(&rs_results, mem.arena_allocator(&panel_state.query_arena)) + panel_state.query_results = rs_grep_as_results(&rs_results) free_grep_results(rs_results) } @@ -310,7 +314,7 @@ make_grep_panel :: proc(state: ^core.State) -> core.Panel { }, drop = proc(state: ^core.State, panel_state: ^core.PanelState) { if panel_state, ok := &panel_state.(core.GrepPanel); ok { - delete(panel_state.query_arena.data) + delete(panel_state.query_arena.data, state.ctx.allocator) } }, render_proc = proc(state: ^core.State, panel_state: ^core.PanelState) -> (ok: bool) {