]> git.alsa-project.org Git - alsa-lib.git/commitdiff
ucm: execute SectionDefaults lately (when the first verb is set)
authorJaroslav Kysela <perex@perex.cz>
Thu, 14 May 2020 14:12:23 +0000 (16:12 +0200)
committerJaroslav Kysela <perex@perex.cz>
Thu, 14 May 2020 16:24:39 +0000 (18:24 +0200)
We need a way to set the SectionOnce at first before SectionDefaults.
It also does not make sense to run SectionDefaults when the API is
used only to query for values or so.

Execute the SectionDefaults commands only when the first verb
is set (before the verb specific commands).

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
src/ucm/main.c
src/ucm/ucm_local.h

index 23e15bd8dacb9d12b67a3e5a1eaed2e1ad5aae24..e5f91887193b366d8f93014cb43dc94f2c62fa35 100644 (file)
@@ -542,14 +542,7 @@ static int import_master_config(snd_use_case_mgr_t *uc_mgr)
        err = uc_mgr_import_master_config(uc_mgr);
        if (err < 0)
                return err;
-       err = add_auto_values(uc_mgr);
-       if (err < 0)
-               return err;
-       err = execute_sequence(uc_mgr, &uc_mgr->default_list,
-                              &uc_mgr->value_list, NULL, NULL);
-       if (err < 0)
-               uc_error("Unable to execute default sequence");
-       return err;
+       return add_auto_values(uc_mgr);
 }
 
 /**
@@ -845,6 +838,15 @@ static int set_verb(snd_use_case_mgr_t *uc_mgr,
        int err;
 
        if (enable) {
+               if (!uc_mgr->default_list_executed) {
+                       err = execute_sequence(uc_mgr, &uc_mgr->default_list,
+                                               &uc_mgr->value_list, NULL, NULL);
+                       if (err < 0) {
+                               uc_error("Unable to execute default sequence");
+                               return err;
+                       }
+                       uc_mgr->default_list_executed = 1;
+               }
                seq = &verb->enable_list;
        } else {
                seq = &verb->disable_list;
@@ -985,6 +987,8 @@ int snd_use_case_mgr_reload(snd_use_case_mgr_t *uc_mgr)
 
        uc_mgr_free_verb(uc_mgr);
 
+       uc_mgr->default_list_executed = 0;
+
        /* reload all use cases */
        err = import_master_config(uc_mgr);
        if (err < 0) {
index 784575846b75cb840d1f4e3f2bd57ddd8464db83..849019bdc312cacf2d2d542e263c827d25bd061a 100644 (file)
@@ -226,6 +226,7 @@ struct snd_use_case_mgr {
 
        /* default settings - sequence */
        struct list_head default_list;
+       int default_list_executed;
 
        /* default settings - value list */
        struct list_head value_list;