diff options
author | Ray Strode <rstrode@redhat.com> | 2011-04-26 10:24:04 -0400 |
---|---|---|
committer | Ray Strode <rstrode@redhat.com> | 2011-04-26 15:24:28 -0400 |
commit | ce35916e540ead4a84a779841b9b3f81b7595a34 (patch) | |
tree | 68f963e567225f4940f0480d794ea1e9ddec6388 /src | |
parent | f938e70e4c71b63235702a48ab6d2400488c3ea6 (diff) |
lib: set is-loaded only after we've actually loaded the users
Before we were setting it as soon as we got the unloaded list,
which isn't sufficient, since callers wait for is-loaded to call
list_users, and list_users only returns loaded users.
(bug initially introduced by commit fffd5c51a54682e17ac61e374d629e9aa0dbeeb1)
Diffstat (limited to 'src')
-rw-r--r-- | src/libaccountsservice/act-user-manager.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/src/libaccountsservice/act-user-manager.c b/src/libaccountsservice/act-user-manager.c index 07c8e34..e98140e 100644 --- a/src/libaccountsservice/act-user-manager.c +++ b/src/libaccountsservice/act-user-manager.c @@ -793,7 +793,7 @@ on_new_user_loaded (ActUser *user, (int) act_user_get_uid (user)); } g_object_unref (user); - return; + goto out; } g_debug ("ActUserManager: user '%s' is now loaded", username); @@ -801,7 +801,7 @@ on_new_user_loaded (ActUser *user, if (username_in_exclude_list (manager, username)) { g_debug ("ActUserManager: excluding user '%s'", username); g_object_unref (user); - return; + goto out; } old_user = g_hash_table_lookup (manager->priv->users_by_name, username); @@ -817,6 +817,7 @@ on_new_user_loaded (ActUser *user, add_user (manager, user); g_object_unref (user); +out: if (manager->priv->new_users == NULL) { g_debug ("ActUserManager: no pending users, trying to set loaded property"); maybe_set_is_loaded (manager); @@ -1187,8 +1188,12 @@ on_list_cached_users_finished (DBusGProxy *proxy, return; } - g_debug ("ActUserManager: ListCachedUsers finished, so trying to set loaded property"); - maybe_set_is_loaded (manager); + /* We now have a batch of unloaded users that we know about. Once that initial + * batch is loaded up, we can mark the manager as loaded. + * + * (see on_new_user_loaded) + */ + g_debug ("ActUserManager: ListCachedUsers finished, will set loaded property after list is fully loaded"); g_ptr_array_foreach (paths, (GFunc)add_new_user_for_object_path, manager); g_ptr_array_foreach (paths, (GFunc)g_free, NULL); @@ -1768,6 +1773,11 @@ maybe_set_is_loaded (ActUserManager *manager) return; } + if (manager->priv->new_users != NULL) { + g_debug ("ActUserManager: Loading new users, so not setting loaded property"); + return; + } + /* Don't set is_loaded yet unless the seat is already loaded * or failed to load. */ |