From da9bd46aed82a9c1067f3cf7b680201560bd2176 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Wed, 23 Nov 2016 13:55:28 -0500 Subject: [PATCH] text handle: Don't leak adjustments This can happen if the weak pointer is triggered before the adjustments are unset. Pointed out in https://bugzilla.gnome.org/show_bug.cgi?id=774790 --- gtk/gtktexthandle.c | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/gtk/gtktexthandle.c b/gtk/gtktexthandle.c index cc98d226a0..e402672ea0 100644 --- a/gtk/gtktexthandle.c +++ b/gtk/gtktexthandle.c @@ -461,25 +461,21 @@ _gtk_text_handle_set_scrollable (GtkTextHandle *handle, priv = handle->priv; - if (priv->parent_scrollable) + if (priv->vadj) { - if (priv->vadj) - { - g_signal_handlers_disconnect_by_data (priv->vadj, handle); - g_object_unref (priv->vadj); - priv->vadj = NULL; - } - - if (priv->hadj) - { - g_signal_handlers_disconnect_by_data (priv->hadj, handle); - g_object_unref (priv->hadj); - priv->hadj = NULL; - } - - g_object_remove_weak_pointer (G_OBJECT (priv->parent_scrollable), (gpointer *) &priv->parent_scrollable); + g_signal_handlers_disconnect_by_data (priv->vadj, handle); + g_clear_object (&priv->vadj); } + if (priv->hadj) + { + g_signal_handlers_disconnect_by_data (priv->hadj, handle); + g_clear_object (&priv->hadj); + } + + if (priv->parent_scrollable) + g_object_remove_weak_pointer (G_OBJECT (priv->parent_scrollable), (gpointer *) &priv->parent_scrollable); + priv->parent_scrollable = scrollable; if (scrollable)