From cb92735a54a11f1a99f1cc617677feccccd73eb5 Mon Sep 17 00:00:00 2001 From: pommicket Date: Tue, 30 Sep 2025 12:00:23 -0400 Subject: Fix memory leaks --- config.c | 1 + lsp.c | 18 +++++++++++------- main.c | 1 + 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/config.c b/config.c index 92f3580..284773f 100644 --- a/config.c +++ b/config.c @@ -1538,6 +1538,7 @@ void config_read(Ted *ted, const char *path, ConfigFormat format) { break; case CONFIG_TED_CFG: config_read_ted_cfg(ted, source_rc, &include_stack); + arr_free(include_stack); // force recompute default settings strcpy(ted->default_settings_cwd, "//"); break; diff --git a/lsp.c b/lsp.c index bd13366..32ccf29 100644 --- a/lsp.c +++ b/lsp.c @@ -153,6 +153,15 @@ void lsp_request_free(LSPRequest *r) { memset(r, 0, sizeof *r); } +static void lsp_workspace_edit_free(LSPWorkspaceEdit *edit) { + arr_foreach_ptr(edit->changes, LSPWorkspaceChange, c) { + if (c->type == LSP_CHANGE_EDITS) { + arr_free(c->data.edit.edits); + } + } + arr_free(edit->changes); +} + void lsp_response_free(LSPResponse *r) { lsp_message_base_free(&r->base); switch (r->request.type) { @@ -170,12 +179,7 @@ void lsp_response_free(LSPResponse *r) { break; case LSP_REQUEST_RENAME: { LSPResponseRename *rename = &r->data.rename; - arr_foreach_ptr(rename->changes, LSPWorkspaceChange, c) { - if (c->type == LSP_CHANGE_EDITS) { - arr_free(c->data.edit.edits); - } - } - arr_free(r->data.rename.changes); + lsp_workspace_edit_free(rename); } break; case LSP_REQUEST_HIGHLIGHT: arr_free(r->data.highlight.highlights); @@ -192,7 +196,7 @@ void lsp_response_free(LSPResponse *r) { case LSP_REQUEST_CODE_ACTION: { LSPResponseCodeAction *c = &r->data.code_action; arr_foreach_ptr(c->actions, LSPCodeAction, action) { - arr_free(action->edit.changes); + lsp_workspace_edit_free(&action->edit); } arr_free(c->actions); } break; diff --git a/main.c b/main.c index 6d419a9..25cfca0 100644 --- a/main.c +++ b/main.c @@ -1302,6 +1302,7 @@ int main(int argc, char **argv) { signature_help_quit(ted); autocomplete_quit(ted); format_quit(ted); + code_action_quit(ted); highlights_quit(ted); usages_quit(ted); session_write(ted); -- cgit v1.2.3