From 9d89ed0c54c9c707a8aeb8c8aac0a0b0f4ab9194 Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Wed, 23 Jan 2019 15:14:58 +0000 Subject: [PATCH 1/5] gkeyfilesettingsbackend: Add a code comment to clarify things Signed-off-by: Philip Withnall --- gio/gkeyfilesettingsbackend.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/gio/gkeyfilesettingsbackend.c b/gio/gkeyfilesettingsbackend.c index d5796b706..5ea632305 100644 --- a/gio/gkeyfilesettingsbackend.c +++ b/gio/gkeyfilesettingsbackend.c @@ -225,6 +225,10 @@ get_from_keyfile (GKeyfileSettingsBackend *kfsb, if (str) { return_value = g_variant_parse (type, str, NULL, NULL, NULL); + + /* As a special case, support values of type %G_VARIANT_TYPE_STRING + * not being quoted, since users keep forgetting to do it and then + * getting confused. */ if (return_value == NULL && g_variant_type_equal (type, G_VARIANT_TYPE_STRING) && str[0] != '\"') From f829b65e518a82bd8cb350bb576bcfd6186c3064 Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Wed, 23 Jan 2019 15:15:53 +0000 Subject: [PATCH 2/5] gsettings: Clarify ownership transfer in a few places MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I was trying to debug some memory leaks in the gsettings test. Eventually, it seems that actually they’re caused by the GMemorySettingsBackend being cached by GIOModule — so this commit makes no functional changes. It should make the code and documentation a bit clearer though. Signed-off-by: Philip Withnall --- gio/gsettings.c | 8 +++++--- gio/gsettingsbackend.c | 2 ++ gio/gsettingsschema.c | 2 ++ 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/gio/gsettings.c b/gio/gsettings.c index 2934f2b4b..dd8f94485 100644 --- a/gio/gsettings.c +++ b/gio/gsettings.c @@ -1137,6 +1137,8 @@ g_settings_new_full (GSettingsSchema *schema, } /* Internal read/write utilities {{{1 */ + +/* @value will be sunk */ static gboolean g_settings_write_to_backend (GSettings *settings, GSettingsSchemaKey *key, @@ -1417,7 +1419,7 @@ g_settings_set_enum (GSettings *settings, return FALSE; } - success = g_settings_write_to_backend (settings, &skey, variant); + success = g_settings_write_to_backend (settings, &skey, g_steal_pointer (&variant)); g_settings_schema_key_clear (&skey); return success; @@ -1528,7 +1530,7 @@ g_settings_set_flags (GSettings *settings, return FALSE; } - success = g_settings_write_to_backend (settings, &skey, variant); + success = g_settings_write_to_backend (settings, &skey, g_steal_pointer (&variant)); g_settings_schema_key_clear (&skey); return success; @@ -1672,7 +1674,7 @@ g_settings_set (GSettings *settings, value = g_variant_new_va (format, NULL, &ap); va_end (ap); - return g_settings_set_value (settings, key, value); + return g_settings_set_value (settings, key, g_steal_pointer (&value)); } /** diff --git a/gio/gsettingsbackend.c b/gio/gsettingsbackend.c index edc4ff4d3..ca9b908a5 100644 --- a/gio/gsettingsbackend.c +++ b/gio/gsettingsbackend.c @@ -777,6 +777,8 @@ g_settings_backend_read_user_value (GSettingsBackend *backend, * to indicate that the affected keys have suddenly "changed back" to their * old values. * + * If @value has a floating reference, it will be sunk. + * * Returns: %TRUE if the write succeeded, %FALSE if the key was not writable */ gboolean diff --git a/gio/gsettingsschema.c b/gio/gsettingsschema.c index 38c9d78b9..60b3fe0b3 100644 --- a/gio/gsettingsschema.c +++ b/gio/gsettingsschema.c @@ -1472,6 +1472,7 @@ g_settings_schema_key_to_enum (GSettingsSchemaKey *key, return result; } +/* Returns a new floating #GVariant. */ GVariant * g_settings_schema_key_from_enum (GSettingsSchemaKey *key, gint value) @@ -1511,6 +1512,7 @@ g_settings_schema_key_to_flags (GSettingsSchemaKey *key, return result; } +/* Returns a new floating #GVariant. */ GVariant * g_settings_schema_key_from_flags (GSettingsSchemaKey *key, guint value) From 5beed066d12dac59e21994dc647c6641f1d8ce72 Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Wed, 23 Jan 2019 15:17:25 +0000 Subject: [PATCH 3/5] glib.supp: Add suppressions from gsettings test Signed-off-by: Philip Withnall --- glib.supp | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/glib.supp b/glib.supp index ac753d3b0..7354aeab5 100644 --- a/glib.supp +++ b/glib.supp @@ -228,6 +228,16 @@ fun:_g_io_module_get_default } +{ + g-io-module-default-singleton-name + Memcheck:Leak + fun:malloc + ... + fun:g_strdup + ... + fun:_g_io_module_get_default* +} + { g-get-language-names-malloc Memcheck:Leak @@ -675,4 +685,42 @@ ... fun:g_queue_new fun:g_main_context_push_thread_default +} + +# One-time allocations for #GFileInfo attribute cache +{ + g_file_info_attribute_cache + Memcheck:Leak + fun:malloc + ... + fun:ensure_attribute_hash + ... + fun:g_file_* +} +{ + g_file_info_attribute_cache2 + Memcheck:Leak + fun:calloc + ... + fun:ensure_attribute_hash + ... + fun:g_file_* +} +{ + g_file_info_attribute_cache3 + Memcheck:Leak + fun:malloc + ... + fun:lookup_namespace + ... + fun:g_file_* +} +{ + g_file_info_attribute_cache4 + Memcheck:Leak + fun:calloc + ... + fun:lookup_namespace + ... + fun:g_file_* } \ No newline at end of file From caf5103d4befbaf7a2fdc01ef01484ae168e7657 Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Wed, 23 Jan 2019 15:59:17 +0000 Subject: [PATCH 4/5] gsettingsbackend: Fix a minor memory leak This never caused any problems because the default GSettingsBackend is cached forever by GIOModule anyway. Signed-off-by: Philip Withnall --- gio/gsettingsbackend.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gio/gsettingsbackend.c b/gio/gsettingsbackend.c index ca9b908a5..18026ae56 100644 --- a/gio/gsettingsbackend.c +++ b/gio/gsettingsbackend.c @@ -1052,5 +1052,7 @@ g_settings_backend_sync_default (void) if (class->sync) class->sync (backend); + + g_object_unref (backend); } } From 6c14e9a14bb15abd62b6804dd88ef3f103ae7160 Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Wed, 23 Jan 2019 16:25:33 +0000 Subject: [PATCH 5/5] tests: Fix a minor memory leak in the gsettings test g_settings_backend_get_default() returns a strong reference. Signed-off-by: Philip Withnall --- gio/tests/gsettings.c | 1 + 1 file changed, 1 insertion(+) diff --git a/gio/tests/gsettings.c b/gio/tests/gsettings.c index fb19e5156..f254c3195 100644 --- a/gio/tests/gsettings.c +++ b/gio/tests/gsettings.c @@ -2442,6 +2442,7 @@ test_schema_source (void) g_settings_schema_unref (schema); g_settings_schema_source_unref (source); + g_object_unref (backend); } static void