[gnome-flashback] workarounds: fix memory leak



commit 5e6c6e2cfe584c60335a4a129db9eb0dcc782800
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date:   Wed Apr 27 23:55:43 2016 +0300

    workarounds: fix memory leak

 gnome-flashback/libworkarounds/gf-workarounds.c |   51 ++++++++++-------------
 1 files changed, 22 insertions(+), 29 deletions(-)
---
diff --git a/gnome-flashback/libworkarounds/gf-workarounds.c b/gnome-flashback/libworkarounds/gf-workarounds.c
index 560c1c9..75797e9 100644
--- a/gnome-flashback/libworkarounds/gf-workarounds.c
+++ b/gnome-flashback/libworkarounds/gf-workarounds.c
@@ -281,8 +281,9 @@ parse_settings (GfWorkarounds *workarounds,
           setting->value = value;
           setting->last_change_serial = last_change_serial;
 
-          g_hash_table_insert (settings, (gpointer) x_name, setting);
+          g_hash_table_insert (settings, g_strdup (x_name), setting);
 
+          g_free (x_name);
           x_name = NULL;
           value = NULL;
         }
@@ -429,28 +430,24 @@ static void
 apply_app_menu_workaround (GfWorkarounds *workarounds)
 {
   const gchar *key;
+  XSettingsSetting *old;
   XSettingsSetting *setting;
 
   key = "Gtk/ShellShowsAppMenu";
-  setting = g_hash_table_lookup (workarounds->xsettings, key);
-
-  if (setting != NULL)
-    {
-      g_hash_table_steal (workarounds->xsettings, key);
-      free_gvalue (setting->value);
-    }
-  else
-    {
-      setting = g_new0 (XSettingsSetting, 1);
-      setting->name = g_strdup (key);
-      setting->type = XSETTINGS_TYPE_INT;
-      setting->last_change_serial = 0;
-    }
+  old = g_hash_table_lookup (workarounds->xsettings, key);
 
+  setting = g_new0 (XSettingsSetting, 1);
+  setting->name = g_strdup (key);
+  setting->type = XSETTINGS_TYPE_INT;
   setting->value = g_new0 (GValue, 1);
+  setting->last_change_serial = 0;
+
   g_value_init (setting->value, G_TYPE_INT);
   g_value_set_int (setting->value, 0);
 
+  if (old != NULL)
+    setting->last_change_serial = old->last_change_serial;
+
   g_hash_table_insert (workarounds->xsettings, g_strdup (key), setting);
 }
 
@@ -458,28 +455,24 @@ static void
 apply_button_layout_workaround (GfWorkarounds *workarounds)
 {
   const gchar *key;
+  XSettingsSetting *old;
   XSettingsSetting *setting;
 
   key = "Gtk/DecorationLayout";
-  setting = g_hash_table_lookup (workarounds->xsettings, key);
-
-  if (setting != NULL)
-    {
-      g_hash_table_steal (workarounds->xsettings, key);
-      free_gvalue (setting->value);
-    }
-  else
-    {
-      setting = g_new0 (XSettingsSetting, 1);
-      setting->name = g_strdup (key);
-      setting->type = XSETTINGS_TYPE_STRING;
-      setting->last_change_serial = 0;
-    }
+  old = g_hash_table_lookup (workarounds->xsettings, key);
 
+  setting = g_new0 (XSettingsSetting, 1);
+  setting->name = g_strdup (key);
+  setting->type = XSETTINGS_TYPE_STRING;
   setting->value = g_new0 (GValue, 1);
+  setting->last_change_serial = 0;
+
   g_value_init (setting->value, G_TYPE_STRING);
   g_value_set_string (setting->value, workarounds->fix_button_layout);
 
+  if (old != NULL)
+    setting->last_change_serial = old->last_change_serial;
+
   g_hash_table_insert (workarounds->xsettings, g_strdup (key), setting);
 }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]