This is an automated email from the git hooks/post-receive script. o c h o s i p u s h e d a c o m m i t t o b r a n c h m a s t e r in repository xfce/xfce4-panel.
commit fd4b03b165ba6e3110014216dc77468401237e4c Author: Ali Abdallah <a...@xfce.org> Date: Sun Jun 25 13:38:30 2017 +0200 Fix GPtrArray usage in launcher and systray For some properties, the launcher and systray plugins use a GPtrArray. In their _get_property, they set the array to the value using g_value_set_boxed, followed by a call to xfconf_array_free, which calls g_value_unset, g_free on each array's values and at the end a call to g_ptr_array_free. This results in xfconf_channel_set_property getting an array with length 0, making the preparation of the GVariant fails (xfconf_gvalue_to_gvariant). This is fixed in both plugins, by using a g_ptr_array_new_full, setting the boxed value and releasing the reference count of the array, the array's values are later destroyed by the (GDestroyNotify) function. No idea why it worked before with xfconf < 4.13.0. --- plugins/launcher/launcher.c | 15 +++++++++++++-- plugins/systray/systray.c | 16 ++++++++++++---- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/plugins/launcher/launcher.c b/plugins/launcher/launcher.c index 55e3af1..de92ffb 100644 --- a/plugins/launcher/launcher.c +++ b/plugins/launcher/launcher.c @@ -402,6 +402,17 @@ launcher_plugin_init (LauncherPlugin *plugin) static void +launcher_free_array_element (gpointer data) +{ + GValue *value = (GValue *)data; + + g_value_unset (value); + g_free (value); +} + + + +static void launcher_plugin_get_property (GObject *object, guint prop_id, GValue *value, @@ -416,7 +427,7 @@ launcher_plugin_get_property (GObject *object, switch (prop_id) { case PROP_ITEMS: - array = g_ptr_array_new (); + array = g_ptr_array_new_full (1, (GDestroyNotify) launcher_free_array_element); for (li = plugin->items; li != NULL; li = li->next) { tmp = g_new0 (GValue, 1); @@ -431,7 +442,7 @@ launcher_plugin_get_property (GObject *object, g_ptr_array_add (array, tmp); } g_value_set_boxed (value, array); - xfconf_array_free (array); + g_ptr_array_unref (array); break; case PROP_DISABLE_TOOLTIPS: diff --git a/plugins/systray/systray.c b/plugins/systray/systray.c index 86c036c..e3061ca 100644 --- a/plugins/systray/systray.c +++ b/plugins/systray/systray.c @@ -257,6 +257,14 @@ systray_plugin_init (SystrayPlugin *plugin) } +static void +systray_free_array_element (gpointer data) +{ + GValue *value = (GValue *)data; + + g_value_unset (value); + g_free (value); +} static void systray_plugin_get_property (GObject *object, @@ -279,17 +287,17 @@ systray_plugin_get_property (GObject *object, break; case PROP_NAMES_ORDERED: - array = g_ptr_array_new (); + array = g_ptr_array_new_full (1, (GDestroyNotify) systray_free_array_element); g_slist_foreach (plugin->names_ordered, systray_plugin_names_collect_ordered, array); g_value_set_boxed (value, array); - xfconf_array_free (array); + g_ptr_array_unref (array); break; case PROP_NAMES_HIDDEN: - array = g_ptr_array_new (); + array = g_ptr_array_new_full (1, (GDestroyNotify) systray_free_array_element); g_hash_table_foreach (plugin->names_hidden, systray_plugin_names_collect_hidden, array); g_value_set_boxed (value, array); - xfconf_array_free (array); + g_ptr_array_unref (array); break; default: -- To stop receiving notification emails like this one, please contact the administrator of this repository. _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org https://mail.xfce.org/mailman/listinfo/xfce4-commits