[dconf] Fix some leaks in the dconf service



commit d5814e585e7d13c10e644ff4885dff7667e37de3
Author: Ryan Lortie <desrt desrt ca>
Date:   Wed Dec 15 11:35:28 2010 -0500

    Fix some leaks in the dconf service

 service/dconf-rebuilder.c |   19 +++++++++++++------
 service/service.c         |    2 ++
 2 files changed, 15 insertions(+), 6 deletions(-)
---
diff --git a/service/dconf-rebuilder.c b/service/dconf-rebuilder.c
index cd1b623..d7f4cb3 100644
--- a/service/dconf-rebuilder.c
+++ b/service/dconf-rebuilder.c
@@ -189,19 +189,26 @@ dconf_rebuilder_rebuild (const gchar  *filename,
 {
   DConfRebuilderState state = { prefix, strlen (prefix),
                                 0, keys, values, n_items };
+  gboolean success;
   GvdbTable *old;
 
   state.table = gvdb_hash_table_new (NULL, NULL);
 
   if ((old = gvdb_table_new (filename, FALSE, NULL)))
-    gvdb_table_walk (old, "/",
-                     dconf_rebuilder_walk_open,
-                     dconf_rebuilder_walk_value,
-                     dconf_rebuilder_walk_close,
-                     &state);
+    {
+      gvdb_table_walk (old, "/",
+                       dconf_rebuilder_walk_open,
+                       dconf_rebuilder_walk_value,
+                       dconf_rebuilder_walk_close,
+                       &state);
+      gvdb_table_unref (old);
+    }
 
   while (state.index != state.n_items)
     dconf_rebuilder_put_item (&state);
 
-  return gvdb_table_write_contents (state.table, filename, FALSE, error);
+  success = gvdb_table_write_contents (state.table, filename, FALSE, error);
+  g_hash_table_unref (state.table);
+
+  return success;
 }
diff --git a/service/service.c b/service/service.c
index aca0029..c5e12c8 100644
--- a/service/service.c
+++ b/service/service.c
@@ -163,6 +163,7 @@ method_call (GDBusConnection       *connection,
       if (!dconf_writer_write (writer, key, value, &error))
         {
           g_dbus_method_invocation_return_gerror (invocation, error);
+          g_variant_unref (value);
           g_error_free (error);
           return;
         }
@@ -178,6 +179,7 @@ method_call (GDBusConnection       *connection,
                                      g_variant_new ("(s ass)",
                                                     key, none, tag),
                                      NULL);
+      g_variant_unref (value);
       g_free (path);
       g_free (tag);
     }



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