[gdm/multi-stack: 6/35] disconnect signal handlers in destroy session
- From: Ray Strode <halfline src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gdm/multi-stack: 6/35] disconnect signal handlers in destroy session
- Date: Tue, 24 Aug 2010 14:15:29 +0000 (UTC)
commit f03a89dc0782aff6173b95ebc8e0ded678bcbb00
Author: Ray Strode <rstrode redhat com>
Date: Tue Jul 13 22:42:43 2010 -0400
disconnect signal handlers in destroy session
We don't want them firing as part of object destruction
daemon/gdm-simple-slave.c | 102 ++++++++++++++++++++++++++++++++++++++++----
1 files changed, 92 insertions(+), 10 deletions(-)
---
diff --git a/daemon/gdm-simple-slave.c b/daemon/gdm-simple-slave.c
index 6b9159a..7187ea1 100644
--- a/daemon/gdm-simple-slave.c
+++ b/daemon/gdm-simple-slave.c
@@ -97,6 +97,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
@@ -171,16 +172,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);
@@ -780,6 +771,97 @@ create_new_session (GdmSimpleSlave *slave)
}
static void
+destroy_session (GdmSimpleSlave *slave)
+{
+ 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_layout_name_changed),
+ slave);
+
+ g_signal_handlers_disconnect_by_func (slave->priv->session,
+ G_CALLBACK (on_default_session_name_changed),
+ 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
on_greeter_session_start (GdmGreeterSession *greeter,
GdmSimpleSlave *slave)
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]