summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRay Strode <rstrode@redhat.com>2010-07-13 22:42:43 -0400
committerRay Strode <rstrode@redhat.com>2011-03-08 00:34:52 -0500
commit412ec369b1006a95ed99507fece88de441ae5fe9 (patch)
tree4744baa5c605afcf645e0afe637afa1b3bd9568d
parent22ce4a07b5d3d4f17063130a0f03469a2946e9e0 (diff)
downloadgdm-412ec369b1006a95ed99507fece88de441ae5fe9.tar.gz
daemon: disconnect signal handlers in destroy session
We don't want them firing as part of object destruction
-rw-r--r--daemon/gdm-simple-slave.c100
1 files changed, 90 insertions, 10 deletions
diff --git a/daemon/gdm-simple-slave.c b/daemon/gdm-simple-slave.c
index e6b3c985..c5771965 100644
--- a/daemon/gdm-simple-slave.c
+++ b/daemon/gdm-simple-slave.c
@@ -104,6 +104,7 @@ static void gdm_simple_slave_finalize (GObject *object);
G_DEFINE_TYPE (GdmSimpleSlave, gdm_simple_slave, GDM_TYPE_SLAVE)
static void create_new_session (GdmSimpleSlave *slave);
+static void destroy_session (GdmSimpleSlave *slave);
static void start_greeter (GdmSimpleSlave *slave);
static void
@@ -238,16 +239,6 @@ add_user_authorization (GdmSimpleSlave *slave,
}
static void
-destroy_session (GdmSimpleSlave *slave)
-{
- if (slave->priv->session != NULL) {
- gdm_session_close (GDM_SESSION (slave->priv->session));
- g_object_unref (slave->priv->session);
- slave->priv->session = NULL;
- }
-}
-
-static void
reset_session (GdmSimpleSlave *slave)
{
destroy_session (slave);
@@ -834,6 +825,95 @@ create_new_session (GdmSimpleSlave *slave)
}
static void
+destroy_session (GdmSimpleSlave *slave)
+{
+ if (slave->priv->session == NULL) {
+ return;
+ }
+
+ g_signal_handlers_disconnect_by_func (slave->priv->session,
+ G_CALLBACK (on_session_conversation_started),
+ slave);
+ g_signal_handlers_disconnect_by_func (slave->priv->session,
+ G_CALLBACK (on_session_setup_complete),
+ slave);
+ g_signal_handlers_disconnect_by_func (slave->priv->session,
+ G_CALLBACK (on_session_setup_failed),
+ slave);
+ g_signal_handlers_disconnect_by_func (slave->priv->session,
+ G_CALLBACK (on_session_reset_complete),
+ slave);
+ g_signal_handlers_disconnect_by_func (slave->priv->session,
+ G_CALLBACK (on_session_reset_failed),
+ slave);
+ g_signal_handlers_disconnect_by_func (slave->priv->session,
+ G_CALLBACK (on_session_authenticated),
+ slave);
+ g_signal_handlers_disconnect_by_func (slave->priv->session,
+ G_CALLBACK (on_session_authentication_failed),
+ slave);
+ g_signal_handlers_disconnect_by_func (slave->priv->session,
+ G_CALLBACK (on_session_authorized),
+ slave);
+ g_signal_handlers_disconnect_by_func (slave->priv->session,
+ G_CALLBACK (on_session_authorization_failed),
+ slave);
+ g_signal_handlers_disconnect_by_func (slave->priv->session,
+ G_CALLBACK (on_session_accredited),
+ slave);
+ g_signal_handlers_disconnect_by_func (slave->priv->session,
+ G_CALLBACK (on_session_accreditation_failed),
+ slave);
+ g_signal_handlers_disconnect_by_func (slave->priv->session,
+ G_CALLBACK (on_session_opened),
+ slave);
+ g_signal_handlers_disconnect_by_func (slave->priv->session,
+ G_CALLBACK (on_session_open_failed),
+ slave);
+ g_signal_handlers_disconnect_by_func (slave->priv->session,
+ G_CALLBACK (on_session_info),
+ slave);
+ g_signal_handlers_disconnect_by_func (slave->priv->session,
+ G_CALLBACK (on_session_problem),
+ slave);
+ g_signal_handlers_disconnect_by_func (slave->priv->session,
+ G_CALLBACK (on_session_info_query),
+ slave);
+ g_signal_handlers_disconnect_by_func (slave->priv->session,
+ G_CALLBACK (on_session_secret_info_query),
+ slave);
+ g_signal_handlers_disconnect_by_func (slave->priv->session,
+ G_CALLBACK (on_session_started),
+ slave);
+ g_signal_handlers_disconnect_by_func (slave->priv->session,
+ G_CALLBACK (on_session_exited),
+ slave);
+ g_signal_handlers_disconnect_by_func (slave->priv->session,
+ G_CALLBACK (on_session_died),
+ slave);
+#if 0
+ g_signal_handlers_disconnect_by_func (slave->priv->session,
+ G_CALLBACK (on_session_closed),
+ slave);
+#endif
+ g_signal_handlers_disconnect_by_func (slave->priv->session,
+ G_CALLBACK (on_session_selected_user_changed),
+ slave);
+
+ g_signal_handlers_disconnect_by_func (slave->priv->session,
+ G_CALLBACK (on_default_language_name_changed),
+ slave);
+
+ g_signal_handlers_disconnect_by_func (slave->priv->session,
+ G_CALLBACK (on_default_session_name_changed),
+ slave);
+
+ gdm_session_close (GDM_SESSION (slave->priv->session));
+ g_object_unref (slave->priv->session);
+ slave->priv->session = NULL;
+}
+
+static void
on_greeter_session_start (GdmGreeterSession *greeter,
GdmSimpleSlave *slave)
{