diff options
author | Ray Strode <rstrode@redhat.com> | 2009-05-07 16:32:03 -0400 |
---|---|---|
committer | Ray Strode <rstrode@redhat.com> | 2009-05-07 16:32:03 -0400 |
commit | f544cd0cfb12de8104fe6b60955b68ee5df5de20 (patch) | |
tree | af5d8abcab6ef542b2733c3c34ab2572933e6ff5 /daemon/gdm-simple-slave.c | |
parent | ec1748847c4559d2a47e4a12e49e5befa4019406 (diff) | |
download | gdm-f544cd0cfb12de8104fe6b60955b68ee5df5de20.tar.gz |
in progress work to make pam module death asyncmulti-stack-async-stop
Diffstat (limited to 'daemon/gdm-simple-slave.c')
-rw-r--r-- | daemon/gdm-simple-slave.c | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/daemon/gdm-simple-slave.c b/daemon/gdm-simple-slave.c index 2cac8845..2e916627 100644 --- a/daemon/gdm-simple-slave.c +++ b/daemon/gdm-simple-slave.c @@ -84,6 +84,7 @@ struct GdmSimpleSlavePrivate GdmGreeterServer *greeter_server; GdmGreeterSession *greeter; + guint recreate_session_on_close : 1; guint start_session_when_ready : 1; guint waiting_to_start_session : 1; }; @@ -163,20 +164,36 @@ add_user_authorization (GdmSimpleSlave *slave, } static void +on_session_close (GdmSimpleSlave *slave) +{ + g_object_unref (slave->priv->session); + slave->priv->session = NULL; + slave->priv->recreate_session_on_close = FALSE; + + create_new_session (slave); +} + +static void destroy_session (GdmSimpleSlave *slave) { if (slave->priv->session != NULL) { + /* Close is asynchronous, we should wait for it to finish + * before going on. + */ gdm_session_close (GDM_SESSION (slave->priv->session)); - g_object_unref (slave->priv->session); - slave->priv->session = NULL; + + g_signal_connect_swapped (slave->priv->session, + "closed", + G_CALLBACK (on_session_close), + slave); } } static void reset_session (GdmSimpleSlave *slave) { + slave->priv->recreate_session_on_close = TRUE; destroy_session (slave); - create_new_session (slave); } static gboolean |