summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaroslav Kysela <perex@perex.cz>2022-05-27 14:28:13 +0200
committerJaroslav Kysela <perex@perex.cz>2022-05-27 14:28:23 +0200
commit0418fd32c76228bc795d7968a12e3ad5337e40e9 (patch)
treec1cefcb8ff6276d2c418af88f89a60ffd6a4a606
parent4119e33d280352afc337dd01769f9fc8424c82af (diff)
downloadalsa-lib-0418fd32c76228bc795d7968a12e3ad5337e40e9.tar.gz
ucm: fix the reload call (snd_use_case_mgr_reload)
Handle the local configuration and macros trees properly. Signed-off-by: Jaroslav Kysela <perex@perex.cz>
-rw-r--r--src/ucm/main.c8
-rw-r--r--src/ucm/parser.c8
-rw-r--r--src/ucm/utils.c12
3 files changed, 16 insertions, 12 deletions
diff --git a/src/ucm/main.c b/src/ucm/main.c
index 4302f63b..58ed49dd 100644
--- a/src/ucm/main.c
+++ b/src/ucm/main.c
@@ -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;
diff --git a/src/ucm/parser.c b/src/ucm/parser.c
index dd492988..70123068 100644
--- a/src/ucm/parser.c
+++ b/src/ucm/parser.c
@@ -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);
diff --git a/src/ucm/utils.c b/src/ucm/utils.c
index 8123fc67..bc33ee5a 100644
--- a/src/ucm/utils.c
+++ b/src/ucm/utils.c
@@ -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);