[glib] GSettings: two memory use fixes
- From: Ryan Lortie <ryanl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib] GSettings: two memory use fixes
- Date: Fri, 27 Jan 2012 08:05:14 +0000 (UTC)
commit da386705f9e03ebf2cb9abbc523d84146b075444
Author: Ryan Lortie <desrt desrt ca>
Date: Fri Jan 27 03:00:23 2012 -0500
GSettings: two memory use fixes
First, correct a rather dubious case of accessing a GSettingsSchemaKey
after clearing it. This was technically okay because only the key name
was accessed (and it is not owned by the struct) but it looks very
wrong.
Second, have g_settings_backend_write() sink the passed in GVariant*.
Not all backends get this right, and I'm starting to like the pattern of
virtual function wrappers being responsible for sinking the parameters
that they are documented as consuming.
gio/gsettings.c | 4 +++-
gio/gsettingsbackend.c | 8 +++++++-
2 files changed, 10 insertions(+), 2 deletions(-)
---
diff --git a/gio/gsettings.c b/gio/gsettings.c
index 95f0489..7db7196 100644
--- a/gio/gsettings.c
+++ b/gio/gsettings.c
@@ -1322,6 +1322,7 @@ g_settings_set_value (GSettings *settings,
GVariant *value)
{
GSettingsSchemaKey skey;
+ gboolean success;
g_return_val_if_fail (G_IS_SETTINGS (settings), FALSE);
g_return_val_if_fail (key != NULL, FALSE);
@@ -1349,9 +1350,10 @@ g_settings_set_value (GSettings *settings,
return FALSE;
}
+ success = g_settings_write_to_backend (settings, &skey, value);
g_settings_schema_key_clear (&skey);
- return g_settings_write_to_backend (settings, &skey, value);
+ return success;
}
/**
diff --git a/gio/gsettingsbackend.c b/gio/gsettingsbackend.c
index 6075d7f..f2f11eb 100644
--- a/gio/gsettingsbackend.c
+++ b/gio/gsettingsbackend.c
@@ -772,8 +772,14 @@ g_settings_backend_write (GSettingsBackend *backend,
GVariant *value,
gpointer origin_tag)
{
- return G_SETTINGS_BACKEND_GET_CLASS (backend)
+ gboolean success;
+
+ g_variant_ref_sink (value);
+ success = G_SETTINGS_BACKEND_GET_CLASS (backend)
->write (backend, key, value, origin_tag);
+ g_variant_unref (value);
+
+ return success;
}
/*< private >
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]