]> git.alsa-project.org Git - alsa-lib.git/commitdiff
ucm: fix the reload call (snd_use_case_mgr_reload)
authorJaroslav Kysela <perex@perex.cz>
Fri, 27 May 2022 12:28:13 +0000 (14:28 +0200)
committerJaroslav Kysela <perex@perex.cz>
Fri, 27 May 2022 12:28:23 +0000 (14:28 +0200)
Handle the local configuration and macros trees properly.

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

index 4302f63b427a6820006f90399891db5d1f46f966..58ed49dd50d5c9be01ea1808e855276de5363495 100644 (file)
@@ -1527,14 +1527,6 @@ int snd_use_case_mgr_open(snd_use_case_mgr_t **uc_mgr,
                return err;
        }
 
-       err = snd_config_top(&mgr->local_config);
-       if (err < 0)
-               goto _err;
-
-       err = snd_config_top(&mgr->macros);
-       if (err < 0)
-               goto _err;
-
        mgr->card_name = strdup(card_name);
        if (mgr->card_name == NULL) {
                err = -ENOMEM;
index dd49298830db0beb306541d68a984ae5786642e4..701230680c0a5e2a56b49e80c7e6765dd104e2ed 100644 (file)
@@ -2807,6 +2807,14 @@ int uc_mgr_import_master_config(snd_use_case_mgr_t *uc_mgr)
        const char *name;
        int err;
 
+       err = snd_config_top(&uc_mgr->local_config);
+       if (err < 0)
+               return err;
+
+       err = snd_config_top(&uc_mgr->macros);
+       if (err < 0)
+               return err;
+
        name = uc_mgr->card_name;
        if (strncmp(name, "hw:", 3) == 0) {
                err = get_by_card(uc_mgr, name);
index 8123fc67eced223ce1d85d9ab50fe31ba4d085d0..bc33ee5a9f4526147dac8bb5f23b8c330d5a4160 100644 (file)
@@ -734,6 +734,14 @@ void uc_mgr_free_verb(snd_use_case_mgr_t *uc_mgr)
        struct list_head *pos, *npos;
        struct use_case_verb *verb;
 
+       if (uc_mgr->local_config) {
+               snd_config_delete(uc_mgr->local_config);
+               uc_mgr->local_config = NULL;
+       }
+       if (uc_mgr->macros) {
+               snd_config_delete(uc_mgr->macros);
+               uc_mgr->macros = NULL;
+       }
        list_for_each_safe(pos, npos, &uc_mgr->verb_list) {
                verb = list_entry(pos, struct use_case_verb, list);
                free(verb->name);
@@ -768,10 +776,6 @@ void uc_mgr_free_verb(snd_use_case_mgr_t *uc_mgr)
 
 void uc_mgr_free(snd_use_case_mgr_t *uc_mgr)
 {
-       if (uc_mgr->local_config)
-               snd_config_delete(uc_mgr->local_config);
-       if (uc_mgr->macros)
-               snd_config_delete(uc_mgr->macros);
        uc_mgr_free_verb(uc_mgr);
        uc_mgr_free_ctl_list(uc_mgr);
        free(uc_mgr->card_name);