[gdm/wip/weak-ref-removal: 2/6] client: add weak pointer for connection object



commit 280e12f7f3cb2d7ccdc8fd2ef08907335b9e2f2b
Author: Marco Trevisan (TreviƱo) <mail 3v1n0 net>
Date:   Wed May 9 15:43:27 2018 +0100

    client: add weak pointer for connection object
    
    At the moment we fail to nullify GdmClient's
    connection to GDM when the connection is disposed.
    
    This commit adds a weak pointer to correct that mistake.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=795940

 libgdm/gdm-client.c |   12 ++++++++++++
 1 files changed, 12 insertions(+), 0 deletions(-)
---
diff --git a/libgdm/gdm-client.c b/libgdm/gdm-client.c
index c017bf8..b5f3530 100644
--- a/libgdm/gdm-client.c
+++ b/libgdm/gdm-client.c
@@ -460,6 +460,10 @@ gdm_client_open_connection_sync (GdmClient      *client,
                         g_clear_pointer (&client->priv->address, g_free);
                         goto out;
                 }
+
+                g_object_add_weak_pointer (G_OBJECT (client->priv->connection),
+                                           (gpointer *)
+                                           &client->priv->connection);
         } else {
                 client->priv->connection = g_object_ref (client->priv->connection);
         }
@@ -583,6 +587,8 @@ gdm_client_open_connection_finish (GdmClient      *client,
 
         if (client->priv->connection == NULL) {
                 client->priv->connection = g_steal_pointer (&connection);
+                g_object_add_weak_pointer (G_OBJECT (client->priv->connection),
+                                           (gpointer *) &client->priv->connection);
         } else if (client->priv->connection == connection) {
                 connection = NULL;
         }
@@ -1616,6 +1622,12 @@ gdm_client_finalize (GObject *object)
                                               &client->priv->chooser);
         }
 
+        if (client->priv->connection != NULL) {
+                g_object_remove_weak_pointer (G_OBJECT (client->priv->connection),
+                                              (gpointer *)
+                                              &client->priv->connection);
+        }
+
         g_clear_object (&client->priv->manager);
         g_clear_object (&client->priv->connection);
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]