From d5362eb9f74aafae8330ae3806f450fdd6ffe17b Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 15 Apr 2015 23:51:29 +1000 Subject: [PATCH] Resolve memory leaks on exit --- spectrwm.c | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/spectrwm.c b/spectrwm.c index 0e29167..2cc0d24 100644 --- a/spectrwm.c +++ b/spectrwm.c @@ -10827,6 +10827,7 @@ shutdown_cleanup(void) num_screens = get_screen_count(); for (i = 0; i < num_screens; ++i) { + struct swm_region *r; int j; xcb_set_input_focus(conn, XCB_INPUT_FOCUS_POINTER_ROOT, @@ -10846,19 +10847,39 @@ shutdown_cleanup(void) } for (j = 0; j < SWM_WS_MAX; ++j) { + struct ws_win *win; + free(screens[i].ws[j].name); + + while ((win = TAILQ_FIRST(&screens[i].ws[j].winlist)) != NULL) { + TAILQ_REMOVE(&screens[i].ws[j].winlist, win, entry); + free(win); + } + } + + while ((r = TAILQ_FIRST(&screens[i].rl)) != NULL) { + TAILQ_REMOVE(&screens[i].rl, r, entry); + free(r->bar); + free(r); + } + + while ((r = TAILQ_FIRST(&screens[i].orl)) != NULL) { + TAILQ_REMOVE(&screens[i].rl, r, entry); + free(r->bar); + free(r); } } free(screens); free(bar_format); + free(bar_fonts); free(clock_format); + free(startup_exception); - if (bar_font_legacy) + if (bar_fs) XFreeFontSet(display, bar_fs); - else { + if (bar_font_legacy == false) XftFontClose(display, bar_font); - } xcb_key_symbols_free(syms); xcb_flush(conn); -- 2.39.2