From 06c25ff838dc1b6e1853608a992f932d9655b9ab Mon Sep 17 00:00:00 2001 From: Akos Horvath Date: Tue, 2 Apr 2024 11:41:37 +0200 Subject: [PATCH] free log_entries in wm_exit --- src/util.c | 21 +++++++++++++++++---- src/wm.c | 2 ++ 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/util.c b/src/util.c index fc7a185..6adaef1 100644 --- a/src/util.c +++ b/src/util.c @@ -242,6 +242,7 @@ json_object* wm_state_to_json_object(Wm *wm) free(ws_with_index->str); free(ws_with_index); } + wm_uintarray_free(ws_str); return ret; } @@ -256,7 +257,7 @@ void wm_log_state(Wm *wm, const char *prefixstr, const char* logfile) char prefix[WM_PREFIX_LEN + 32] = {0}; snprintf(prefix, sizeof(prefix), "%lu:%s", time(NULL), prefixstr); - json_object *log_entry_obj = wm_state_to_json_object(wm, prefixstr); + json_object *log_entry_obj = wm_state_to_json_object(wm); int fd = -1; struct json_object *jobj = NULL; @@ -788,11 +789,12 @@ static void recursive_mkdir(char *path, mode_t mode) void wm_logfile_init(const char *path) { - char *dup = strdup(path); - char *log_file_dir = dirname(dup); if (access(path, F_OK) == 0) return; + char *dup = strdup(path); + char *log_file_dir = dirname(dup); + int ret = access(log_file_dir, W_OK | R_OK); if (ret == 0) { @@ -1373,7 +1375,18 @@ void wm_logentries_free(UIntArray *entries) for (size_t j = 0; j < entry->workspaces->size; j++) { TreeNode *node = entry->workspaces->nodes[j]; - if (node != NULL) wm_treenode_free(node); + if (node == NULL) continue; + + NodeArray *children = wm_postorder_traversal(node); + for (size_t k = 0; k < children->size; k++) { + if (children->nodes[k]->type == NODE_CLIENT) { + free(children->nodes[k]->client->name); + free(children->nodes[k]->client); + } + wm_treenode_free(children->nodes[k]); + } + + wm_nodearray_free(children); } wm_nodearray_free(entry->workspaces); diff --git a/src/wm.c b/src/wm.c index 5b5535b..0018261 100644 --- a/src/wm.c +++ b/src/wm.c @@ -535,6 +535,8 @@ void wm_exit(Wm *wm) XftColorFree(wm->display, visual, cmap, &wm->titlebar_text_color); XftFontClose(wm->display, wm->titlebar_font); + wm_logentries_free(wm->log_entries); + XCloseDisplay(wm->display); exit(EXIT_SUCCESS);