Public bug reported:

current build number: 169
device name: mako
channel: ubuntu-touch/devel-proposed
alias: ubuntu-touch/vivid-proposed
last update: 2015-04-12 20:38:14
version version: 169
version ubuntu: 20150412
version device: 20150210
version custom: 20150412

This causes a bad side effect when changing volume via indicator-sound,
as that will cause a sync to accountsservice in order to sync the
volume. Once that sync happens, it will request the user properties, and
in case the user doesn't have a valid language at
/var/lib/AccountsService/users/<user>, it will always rely on the
fallback, which would be fine if calculating the fallback wasn't 't so
cpu or i/o intensive (and that happens multiple times).

As a test, just flash latest vivid image on mako, don't set any language
when the wizard shows up, run top and then change the volume by pressing
volume up/down. This is what I see with mako:

 PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
2609 phablet   20   0  499660 121220  52688 S   7.6  6.5   0:41.69 unity8
5600 phablet   20   0    3676   1760   1288 R   6.0  0.1   0:00.19 
language-option
1312 root      20   0  211532  15572  11344 S   1.9  0.8   0:07.25 
unity-system-co
1316 phablet   20   0   36532   3792   2928 S   1.3  0.2   0:01.66 
accounts-daemon

And the reason why:
src/user.c
...
static void
user_get_property (GObject    *object,
                   guint       param_id,
                   GValue     *value,
                   GParamSpec *pspec)
{
        User *user = USER (object);
...
        case PROP_LANGUAGE:
                if (user->language)
                        g_value_set_string (value, user->language);
                else 
                        g_value_set_string (value, user_get_fallback_value 
(user, "Language"));
                break;
        case PROP_FORMATS_LOCALE:
                if (user->formats_locale)
                        g_value_set_string (value, user->formats_locale);
                else 
                        g_value_set_string (value, user_get_fallback_value 
(user, "FormatsLocale"));
                break;

user_set_property never gets called unless the user changes the system
language from system-settings or wizard.

Once you change the language, it will set a valid language at
/var/lib/AccountsService/users/<user>, causing this behavior to stop.

Another bad side effect of this issue is that it takes quite a while for
accountsservice to reply back to indicator-sound when the sync happens,
possibly causing sync aborts (as indicator-sound only waits 1 second
before triggering another sync).

Some possible ways to fix this issue:
1) Make wizard to set language even when the selected language is already the 
default one;
2) Change accountsservice to save the fallback value at the first time it gets 
that from the system;

** Affects: canonical-devices-system-image
     Importance: Undecided
         Status: New

** Affects: accountsservice (Ubuntu)
     Importance: Undecided
         Status: New

** Affects: unity8 (Ubuntu)
     Importance: Undecided
         Status: New

** Also affects: unity8 (Ubuntu)
   Importance: Undecided
       Status: New

** Also affects: canonical-devices-system-image
   Importance: Undecided
       Status: New

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1443178

Title:
  Accounts Service always relies on language fallback if never set by
  the user

To manage notifications about this bug go to:
https://bugs.launchpad.net/canonical-devices-system-image/+bug/1443178/+subscriptions

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to