summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRay Strode <rstrode@redhat.com>2011-04-26 10:24:04 -0400
committerRay Strode <rstrode@redhat.com>2011-04-26 15:24:28 -0400
commitce35916e540ead4a84a779841b9b3f81b7595a34 (patch)
tree68f963e567225f4940f0480d794ea1e9ddec6388 /src
parentf938e70e4c71b63235702a48ab6d2400488c3ea6 (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.c18
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.
*/