summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRay Strode <rstrode@redhat.com>2017-10-04 11:21:44 -0400
committerRay Strode <rstrode@redhat.com>2017-10-27 13:24:55 -0400
commit9b8727c7e52d466b7a19a46f87fcfc4a71172397 (patch)
treead3c17923e5eeb80013cbacc81b12f38996e08e3
parent9b4108755a6e1f5f04d80fef92dd3f81423857ad (diff)
downloadaccountsservice-9b8727c7e52d466b7a19a46f87fcfc4a71172397.tar.gz
lib: don't track user-added/user-removed until we get initial list
There's no reason to process user-added and user-removed signals until we have our starting list. Those signals are supposed to be a delta off that list anyway. https://bugs.freedesktop.org/show_bug.cgi?id=103488
-rw-r--r--src/libaccountsservice/act-user-manager.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/libaccountsservice/act-user-manager.c b/src/libaccountsservice/act-user-manager.c
index c8a0e20..11049e0 100644
--- a/src/libaccountsservice/act-user-manager.c
+++ b/src/libaccountsservice/act-user-manager.c
@@ -200,6 +200,7 @@ struct ActUserManagerPrivate
gboolean has_multiple_users;
gboolean getting_sessions;
gboolean listing_cached_users;
+ gboolean list_cached_users_done;
};
enum {
@@ -1102,6 +1103,12 @@ on_new_user_in_accounts_service (GDBusProxy *proxy,
ActUserManager *manager = ACT_USER_MANAGER (user_data);
ActUser *user;
+ /* Only track user changes if the user has requested a list
+ * of users */
+ if (!manager->priv->list_cached_users_done) {
+ return;
+ }
+
if (!manager->priv->is_loaded) {
g_debug ("ActUserManager: ignoring new user in accounts service with object path %s since not loaded yet", object_path);
return;
@@ -1122,6 +1129,12 @@ on_user_removed_in_accounts_service (GDBusProxy *proxy,
ActUser *user;
GSList *node;
+ /* Only track user changes if the user has requested a list
+ * of users */
+ if (!manager->priv->list_cached_users_done) {
+ return;
+ }
+
user = g_hash_table_lookup (manager->priv->users_by_object_path, object_path);
if (user == NULL) {
@@ -1559,6 +1572,7 @@ on_list_cached_users_finished (GObject *object,
GError *error = NULL;
manager->priv->listing_cached_users = FALSE;
+ manager->priv->list_cached_users_done = TRUE;
if (!accounts_accounts_call_list_cached_users_finish (proxy, &user_paths, result, &error)) {
g_debug ("ActUserManager: ListCachedUsers failed: %s", error->message);