summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRay Strode <rstrode@redhat.com>2014-09-08 14:55:59 -0400
committerRay Strode <rstrode@redhat.com>2014-09-08 14:55:59 -0400
commit6eb45f9faa83581e9eae6d1fd505fdc8d5ba3583 (patch)
treeb434e32532beb3494ee2d2a04767c544851f0ab3
parentef43b9935a793d8804f973b645c8ead57fe1ad2b (diff)
downloadaccountsservice-6eb45f9faa83581e9eae6d1fd505fdc8d5ba3583.tar.gz
lib: filter out duplicate "new-user" messages from accountsservice
AccountsService occassionally sends out a new-user message twice in a row for a particular user. There's probably a bug there, but for now be more vigilant about filtering out the spurious message.
-rw-r--r--src/libaccountsservice/act-user-manager.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/libaccountsservice/act-user-manager.c b/src/libaccountsservice/act-user-manager.c
index e9a6f8e..d318b4e 100644
--- a/src/libaccountsservice/act-user-manager.c
+++ b/src/libaccountsservice/act-user-manager.c
@@ -1058,6 +1058,25 @@ out:
}
static ActUser *
+find_new_user_with_object_path (ActUserManager *manager,
+ const char *object_path)
+{
+ GSList *node;
+
+ g_assert (object_path != NULL);
+
+ for (node = manager->priv->new_users; node != NULL; node = node->next) {
+ ActUser *user = ACT_USER (node->data);
+ const char *user_object_path = act_user_get_object_path (user);
+ if (g_strcmp0 (user_object_path, object_path) == 0) {
+ return user;
+ }
+ }
+
+ return NULL;
+}
+
+static ActUser *
add_new_user_for_object_path (const char *object_path,
ActUserManager *manager)
{
@@ -1071,6 +1090,14 @@ add_new_user_for_object_path (const char *object_path,
return user;
}
+ user = find_new_user_with_object_path (manager, object_path);
+
+ if (user != NULL) {
+ g_debug ("ActUserManager: tracking existing (but very recently added) %s with object path %s",
+ describe_user (user), object_path);
+ return user;
+ }
+
g_debug ("ActUserManager: tracking new user with object path %s", object_path);
user = create_new_user (manager);