fix memory leak
parent
34b5eb1efc
commit
224df08d5f
|
@ -38,14 +38,16 @@ RS_GrepResult :: struct {
|
||||||
|
|
||||||
@(private)
|
@(private)
|
||||||
rs_grep_as_results :: proc(results: ^RS_GrepResults, allocator := context.allocator) -> []core.GrepQueryResult {
|
rs_grep_as_results :: proc(results: ^RS_GrepResults, allocator := context.allocator) -> []core.GrepQueryResult {
|
||||||
|
context.allocator = allocator
|
||||||
|
|
||||||
query_results := make([]core.GrepQueryResult, results.len)
|
query_results := make([]core.GrepQueryResult, results.len)
|
||||||
|
|
||||||
for i in 0..<results.len {
|
for i in 0..<results.len {
|
||||||
r := results.results[i]
|
r := results.results[i]
|
||||||
|
|
||||||
query_results[i] = core.GrepQueryResult {
|
query_results[i] = core.GrepQueryResult {
|
||||||
file_context = strings.clone_from_ptr(r.text, int(r.text_len), allocator) or_continue,
|
file_context = strings.clone_from_ptr(r.text, int(r.text_len)) or_continue,
|
||||||
file_path = strings.clone_from_ptr(r.path, int(r.path_len), allocator) or_continue,
|
file_path = strings.clone_from_ptr(r.path, int(r.path_len)) or_continue,
|
||||||
line = int(r.line_number) - 1,
|
line = int(r.line_number) - 1,
|
||||||
col = int(r.column) - 1,
|
col = int(r.column) - 1,
|
||||||
}
|
}
|
||||||
|
@ -215,7 +217,7 @@ make_file_buffer_panel :: proc(buffer_index: int) -> core.Panel {
|
||||||
|
|
||||||
make_grep_panel :: proc(state: ^core.State) -> core.Panel {
|
make_grep_panel :: proc(state: ^core.State) -> core.Panel {
|
||||||
query_arena: mem.Arena
|
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()
|
input_map := core.new_input_map()
|
||||||
grep_input_buffer := core.new_virtual_file_buffer(context.allocator)
|
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)
|
mem.arena_free_all(&panel_state.query_arena)
|
||||||
panel_state.query_results = nil
|
panel_state.query_results = nil
|
||||||
|
|
||||||
|
context.allocator = mem.arena_allocator(&panel_state.query_arena)
|
||||||
|
|
||||||
rs_results := grep(
|
rs_results := grep(
|
||||||
strings.clone_to_cstring(query, allocator = context.temp_allocator),
|
strings.clone_to_cstring(query, allocator = context.temp_allocator),
|
||||||
strings.clone_to_cstring(directory, 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)
|
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) {
|
drop = proc(state: ^core.State, panel_state: ^core.PanelState) {
|
||||||
if panel_state, ok := &panel_state.(core.GrepPanel); ok {
|
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) {
|
render_proc = proc(state: ^core.State, panel_state: ^core.PanelState) -> (ok: bool) {
|
||||||
|
|
Loading…
Reference in New Issue