Don't leak variants in the null settings backend
authorChristian Persch <chpe@gnome.org>
Thu, 6 Jan 2011 22:30:09 +0000 (23:30 +0100)
committerChristian Persch <chpe@gnome.org>
Fri, 14 Jan 2011 19:19:24 +0000 (20:19 +0100)
Even though the write fails, the variant still needs to be consumed.

Bug #638872.

gio/gnullsettingsbackend.c

index 507aa8c..d994f08 100644 (file)
@@ -56,6 +56,18 @@ g_null_settings_backend_write (GSettingsBackend *backend,
                                GVariant         *value,
                                gpointer          origin_tag)
 {
+  if (value)
+    g_variant_unref (g_variant_ref_sink (value));
+  return FALSE;
+}
+
+static gboolean
+g_null_settings_backend_write_one (gpointer key,
+                                   gpointer value,
+                                   gpointer data)
+{
+  if (value)
+    g_variant_unref (g_variant_ref_sink (value));
   return FALSE;
 }
 
@@ -64,6 +76,7 @@ g_null_settings_backend_write_tree (GSettingsBackend *backend,
                                     GTree            *tree,
                                     gpointer          origin_tag)
 {
+  g_tree_foreach (tree, g_null_settings_backend_write_one, backend);
   return FALSE;
 }