diff options
author | Jaroslav Kysela <perex@perex.cz> | 2022-05-27 14:28:13 +0200 |
---|---|---|
committer | Jaroslav Kysela <perex@perex.cz> | 2022-05-27 14:28:23 +0200 |
commit | 0418fd32c76228bc795d7968a12e3ad5337e40e9 (patch) | |
tree | c1cefcb8ff6276d2c418af88f89a60ffd6a4a606 | |
parent | 4119e33d280352afc337dd01769f9fc8424c82af (diff) | |
download | alsa-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.c | 8 | ||||
-rw-r--r-- | src/ucm/parser.c | 8 | ||||
-rw-r--r-- | src/ucm/utils.c | 12 |
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); |