[gdm] Defer setting is-loaded until passwd and ck-history are loaded



commit 472295ef2f2e64742d915e68d2c54893e9524bf4
Author: William Jon McCann <jmccann redhat com>
Date:   Fri Jun 11 16:52:08 2010 -0400

    Defer setting is-loaded until passwd and ck-history are loaded
    
    This only really works since we set a maximum execution time on
    the ck-history process.

 gui/simple-greeter/gdm-user-manager.c |   17 ++++++++++++++++-
 1 files changed, 16 insertions(+), 1 deletions(-)
---
diff --git a/gui/simple-greeter/gdm-user-manager.c b/gui/simple-greeter/gdm-user-manager.c
index ec0f3aa..d9b65fa 100644
--- a/gui/simple-greeter/gdm-user-manager.c
+++ b/gui/simple-greeter/gdm-user-manager.c
@@ -102,6 +102,7 @@ struct GdmUserManagerPrivate
         GSList                *include_usernames;
         gboolean               include_all;
 
+        gboolean               load_passwd_pending;
         GCancellable          *cancellable;
 
         guint                  load_id;
@@ -1407,6 +1408,11 @@ ck_history_watch (GIOChannel     *source,
                         manager->priv->ck_history_watchdog_id = 0;
                         manager->priv->ck_history_pid = 0;
                 }
+
+                if (! manager->priv->load_passwd_pending) {
+                        set_is_loaded (manager, TRUE);
+                }
+
                 return FALSE;
         }
 
@@ -1776,13 +1782,20 @@ reload_passwd_job_done (PasswdData *data)
         }
 
         if (! data->manager->priv->is_loaded) {
-                set_is_loaded (data->manager, TRUE);
+                /* if there is an outstanding history
+                   request then wait to emit loaded */
+                if (data->manager->priv->ck_history_pid == 0) {
+                        set_is_loaded (data->manager, TRUE);
+                }
 
                 if (data->manager->priv->include_all == TRUE) {
                         monitor_local_users (data->manager);
                 }
         }
 
+        data->manager->priv->load_passwd_pending = FALSE;
+
+
         passwd_data_free (data);
 
         return FALSE;
@@ -1816,6 +1829,8 @@ schedule_reload_passwd (GdmUserManager *manager)
 {
         PasswdData *passwd_data;
 
+        manager->priv->load_passwd_pending = TRUE;
+
         passwd_data = g_slice_new0 (PasswdData);
         passwd_data->manager = g_object_ref (manager);
         passwd_data->shells = manager->priv->shells;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]