diff options
author | Juan Pablo Ugarte <juanpablougarte@gmail.com> | 2020-08-07 11:03:47 -0300 |
---|---|---|
committer | Juan Pablo Ugarte <juanpablougarte@gmail.com> | 2020-08-07 13:07:38 -0300 |
commit | eca097140dd70665fcc2523694f892630cc7c721 (patch) | |
tree | 962a08d71c130b7b4c6ec72da1150d6c9fbd276d /gladeui | |
parent | b649589d8a974297cc6feae2226785338989d22a (diff) | |
download | glade-eca097140dd70665fcc2523694f892630cc7c721.tar.gz |
GladeCommandAddRemove: fix CommandData leak
Fix leak in finalize()
Diffstat (limited to 'gladeui')
-rw-r--r-- | gladeui/glade-command.c | 52 |
1 files changed, 24 insertions, 28 deletions
diff --git a/gladeui/glade-command.c b/gladeui/glade-command.c index f9b7164a..efc82bed 100644 --- a/gladeui/glade-command.c +++ b/gladeui/glade-command.c @@ -373,7 +373,7 @@ glade_command_property_enabled_finalize (GObject *obj) me = GLADE_COMMAND_PROPERTY_ENABLED (obj); - g_object_unref (me->property); + g_clear_object (&me->property); glade_command_finalize (obj); } @@ -1714,35 +1714,34 @@ glade_command_add_remove_undo (GladeCommand *cmd) } static void +glade_command_data_free (gpointer data) +{ + CommandData *cdata = data; + + if (cdata->placeholder) + { + g_clear_signal_handler (&cdata->handler_id, cdata->placeholder); + + if (g_object_is_floating (G_OBJECT (cdata->placeholder))) + gtk_widget_destroy (GTK_WIDGET (cdata->placeholder)); + } + + g_clear_object (&cdata->widget); + g_list_free_full (cdata->reffed, g_object_unref); + + g_free (cdata); +} + +static void glade_command_add_remove_finalize (GObject *obj) { GladeCommandAddRemove *cmd; - CommandData *cdata; - GList *list; g_return_if_fail (GLADE_IS_COMMAND_ADD_REMOVE (obj)); cmd = GLADE_COMMAND_ADD_REMOVE (obj); - for (list = cmd->widgets; list && list->data; list = list->next) - { - cdata = list->data; - - if (cdata->placeholder) - { - if (cdata->handler_id) - g_signal_handler_disconnect (cdata->placeholder, cdata->handler_id); - if (g_object_is_floating (G_OBJECT (cdata->placeholder))) - gtk_widget_destroy (GTK_WIDGET (cdata->placeholder)); - } - - if (cdata->widget) - g_object_unref (G_OBJECT (cdata->widget)); - - g_list_foreach (cdata->reffed, (GFunc) g_object_unref, NULL); - g_list_free (cdata->reffed); - } - g_list_free (cmd->widgets); + g_list_free_full (cmd->widgets, glade_command_data_free); glade_command_finalize (obj); } @@ -2049,12 +2048,9 @@ glade_command_add_signal_finalize (GObject *obj) { GladeCommandAddSignal *cmd = GLADE_COMMAND_ADD_SIGNAL (obj); - g_object_unref (cmd->widget); - - if (cmd->signal) - g_object_unref (cmd->signal); - if (cmd->new_signal) - g_object_unref (cmd->new_signal); + g_clear_object (&cmd->widget); + g_clear_object (&cmd->signal); + g_clear_object (&cmd->new_signal); glade_command_finalize (obj); } |