diff options
author | Ray Strode <rstrode@redhat.com> | 2014-09-08 14:55:59 -0400 |
---|---|---|
committer | Ray Strode <rstrode@redhat.com> | 2014-09-08 14:55:59 -0400 |
commit | 6eb45f9faa83581e9eae6d1fd505fdc8d5ba3583 (patch) | |
tree | b434e32532beb3494ee2d2a04767c544851f0ab3 | |
parent | ef43b9935a793d8804f973b645c8ead57fe1ad2b (diff) | |
download | accountsservice-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.c | 27 |
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); |