diff options
author | Ray Strode <rstrode@redhat.com> | 2017-10-04 11:21:44 -0400 |
---|---|---|
committer | Ray Strode <rstrode@redhat.com> | 2017-10-27 13:24:55 -0400 |
commit | 9b8727c7e52d466b7a19a46f87fcfc4a71172397 (patch) | |
tree | ad3c17923e5eeb80013cbacc81b12f38996e08e3 | |
parent | 9b4108755a6e1f5f04d80fef92dd3f81423857ad (diff) | |
download | accountsservice-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.c | 14 |
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); |