summaryrefslogtreecommitdiff
path: root/daemon/gdm-session.c
diff options
context:
space:
mode:
authorRay Strode <rstrode@redhat.com>2016-01-22 15:59:00 -0500
committerRay Strode <rstrode@redhat.com>2016-01-22 16:06:11 -0500
commit0254f3371039e6fa02bde373d08666c1a5272efb (patch)
treee0fa2fdc0c53faf890b3dcef7577bedd637d66c9 /daemon/gdm-session.c
parent4886d3dac0242253f77ddb9b47637d6c7a96df1e (diff)
downloadgdm-0254f3371039e6fa02bde373d08666c1a5272efb.tar.gz
session: keep session object alive while establishing credentials
The only reference to session objects gets cleaned up when verification-complete is emitted, which happens in the middle of the establish_credentials handler. This commit makes sure the session object stays alive until the handler completes to prevent a crash. https://bugzilla.gnome.org/show_bug.cgi?id=754814
Diffstat (limited to 'daemon/gdm-session.c')
-rw-r--r--daemon/gdm-session.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/daemon/gdm-session.c b/daemon/gdm-session.c
index 1df71c48..1d857d39 100644
--- a/daemon/gdm-session.c
+++ b/daemon/gdm-session.c
@@ -310,8 +310,8 @@ on_establish_credentials_cb (GdmDBusWorker *proxy,
g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
return;
- self = conversation->session;
- service_name = conversation->service_name;
+ self = g_object_ref (conversation->session);
+ service_name = g_strdup (conversation->service_name);
if (worked) {
if (self->priv->user_verifier_interface != NULL) {
@@ -332,6 +332,9 @@ on_establish_credentials_cb (GdmDBusWorker *proxy,
} else {
report_and_stop_conversation (self, service_name, error);
}
+
+ g_free (service_name);
+ g_object_unref (self);
}
static const char **