summaryrefslogtreecommitdiff
path: root/libgdm/gdm-client.c
diff options
context:
space:
mode:
Diffstat (limited to 'libgdm/gdm-client.c')
-rw-r--r--libgdm/gdm-client.c12
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);