diff options
-rw-r--r-- | 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 c017bf86..b5f35306 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); |