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