From 986207c41a09c72cbb8059244d71c219ad8f41a1 Mon Sep 17 00:00:00 2001 From: Avinash Sonawane <rootkea@gmail.com> Date: Tue, 10 Aug 2021 01:26:32 +0530 Subject: [PATCH] Fix memory leak and make `while` more efficient MR !20 --- src/xfpm-manager.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/xfpm-manager.c b/src/xfpm-manager.c index 3efc8ba1..dae407fc 100644 --- a/src/xfpm-manager.c +++ b/src/xfpm-manager.c @@ -590,7 +590,7 @@ xfpm_manager_set_idle_alarm (XfpmManager *manager) static gchar* xfpm_manager_get_systemd_events(XfpmManager *manager) { - GSList *events = NULL; + GSList *events = NULL, *current_event; gchar *what = g_strdup (""); gboolean logind_handle_power_key, logind_handle_suspend_key, logind_handle_hibernate_key, logind_handle_lid_switch; @@ -610,15 +610,21 @@ xfpm_manager_get_systemd_events(XfpmManager *manager) if (!logind_handle_lid_switch) events = g_slist_append(events, "handle-lid-switch"); - while (events != NULL) + if (events != NULL) { - if ( g_strcmp0 (what, "") == 0 ) - what = g_strdup ( (gchar *) events->data ); - else - what = g_strconcat (what, ":", (gchar *) events->data, NULL); - events = g_slist_next (events); + g_free(what); + current_event = events; + + what = g_strdup ( (gchar *) current_event->data ); + while ((current_event = g_slist_next (current_event))) + { + gchar *what_temp = g_strconcat (what, ":", (gchar *) current_event->data, NULL); + g_free(what); + what = what_temp; + } + + g_slist_free(events); } - g_slist_free(events); return what; } -- GitLab