diff options
author | Ray Strode <rstrode@redhat.com> | 2010-07-13 22:42:43 -0400 |
---|---|---|
committer | Ray Strode <rstrode@redhat.com> | 2011-03-08 00:34:52 -0500 |
commit | 412ec369b1006a95ed99507fece88de441ae5fe9 (patch) | |
tree | 4744baa5c605afcf645e0afe637afa1b3bd9568d | |
parent | 22ce4a07b5d3d4f17063130a0f03469a2946e9e0 (diff) | |
download | gdm-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.c | 100 |
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) { |