[gdm/gnome-3-8] session: don't close outside connections during session reset
- From: Ray Strode <halfline src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gdm/gnome-3-8] session: don't close outside connections during session reset
- Date: Tue, 30 Jul 2013 18:35:58 +0000 (UTC)
commit 31dcd2e22321d0ab259a7d7e4727a20646089320
Author: Ray Strode <rstrode redhat com>
Date: Mon Jul 1 07:57:07 2013 -0400
session: don't close outside connections during session reset
If a user clicks cancel in the login screen the underlying
user verification session gets reset, which causes the greeter
connection to get scrubbed from the record.
Resetting is correct, but scrubbing the connection isn't.
The bug manifests itself at login time, by the greeter not fading
out if the user hit cancel once before logging in. Instead, the
greeter gets kill right away and login proceeds abruptly.
This commit makes gdm_session_reset not erreoneously do this connection
scrubbing.
https://bugzilla.gnome.org/show_bug.cgi?id=703386
daemon/gdm-session.c | 27 ++++++++++++++++-----------
1 files changed, 16 insertions(+), 11 deletions(-)
---
diff --git a/daemon/gdm-session.c b/daemon/gdm-session.c
index 816a4b4..9f79460 100644
--- a/daemon/gdm-session.c
+++ b/daemon/gdm-session.c
@@ -2487,14 +2487,9 @@ stop_all_conversations (GdmSession *self)
stop_all_other_conversations (self, NULL, TRUE);
}
-void
-gdm_session_close (GdmSession *self)
+static void
+do_reset (GdmSession *self)
{
-
- g_return_if_fail (GDM_IS_SESSION (self));
-
- g_debug ("GdmSession: Closing session");
-
if (self->priv->session_conversation != NULL) {
gdm_session_record_logout (self->priv->session_pid,
self->priv->selected_user,
@@ -2505,9 +2500,6 @@ gdm_session_close (GdmSession *self)
stop_all_conversations (self);
- g_list_free_full (self->priv->outside_connections, g_object_unref);
- self->priv->outside_connections = NULL;
-
g_list_free_full (self->priv->pending_worker_connections, g_object_unref);
self->priv->pending_worker_connections = NULL;
@@ -2536,6 +2528,19 @@ gdm_session_close (GdmSession *self)
}
void
+gdm_session_close (GdmSession *self)
+{
+
+ g_return_if_fail (GDM_IS_SESSION (self));
+
+ g_debug ("GdmSession: Closing session");
+ do_reset (self);
+
+ g_list_free_full (self->priv->outside_connections, g_object_unref);
+ self->priv->outside_connections = NULL;
+}
+
+void
gdm_session_answer_query (GdmSession *self,
const char *service_name,
const char *text)
@@ -2566,7 +2571,7 @@ gdm_session_reset (GdmSession *self)
gdm_dbus_user_verifier_emit_reset (self->priv->user_verifier_interface);
}
- gdm_session_close (self);
+ do_reset (self);
}
void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]