summaryrefslogtreecommitdiff
path: root/daemon
diff options
context:
space:
mode:
authorGiovanni Campagna <gcampagna@src.gnome.org>2012-09-18 22:42:12 +0200
committerRay Strode <rstrode@redhat.com>2012-09-18 17:18:51 -0400
commitcb5776465a9286652bb3ff939046052adf01b1e0 (patch)
tree58974558220b3920bd2899c09dab658f07311281 /daemon
parent69aa70a5a0a26afac30a5852b89cddade598a47f (diff)
downloadgdm-cb5776465a9286652bb3ff939046052adf01b1e0.tar.gz
GdmSession: remove session from the hash table before emitting signals
GdmSession::session-died and GdmSession::session-exited cause the simple slave to stop, closing thus also the session, which would then walk all conversations and free them. But the conversation is already freed at the end of the worker-exited / worker-died handlers. https://bugzilla.gnome.org/show_bug.cgi?id=684326
Diffstat (limited to 'daemon')
-rw-r--r--daemon/gdm-session.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/daemon/gdm-session.c b/daemon/gdm-session.c
index ce16972c..abb4104b 100644
--- a/daemon/gdm-session.c
+++ b/daemon/gdm-session.c
@@ -1699,14 +1699,14 @@ worker_exited (GdmSessionWorkerJob *job,
g_debug ("GdmSession: Worker job exited: %d", code);
+ g_hash_table_steal (self->priv->conversations, conversation->service_name);
+
g_object_ref (conversation->job);
if (self->priv->session_conversation == conversation) {
g_signal_emit (self, signals[SESSION_EXITED], 0, code);
self->priv->session_conversation = NULL;
}
- g_hash_table_steal (self->priv->conversations, conversation->service_name);
-
g_debug ("GdmSession: Emitting conversation-stopped signal");
g_signal_emit (self, signals[CONVERSATION_STOPPED], 0, conversation->service_name);
if (self->priv->user_verifier_interface != NULL) {
@@ -1732,14 +1732,14 @@ worker_died (GdmSessionWorkerJob *job,
g_debug ("GdmSession: Worker job died: %d", signum);
+ g_hash_table_steal (self->priv->conversations, conversation->service_name);
+
g_object_ref (conversation->job);
if (self->priv->session_conversation == conversation) {
g_signal_emit (self, signals[SESSION_DIED], 0, signum);
self->priv->session_conversation = NULL;
}
- g_hash_table_steal (self->priv->conversations, conversation->service_name);
-
g_debug ("GdmSession: Emitting conversation-stopped signal");
g_signal_emit (self, signals[CONVERSATION_STOPPED], 0, conversation->service_name);
if (self->priv->user_verifier_interface != NULL) {