From: Jaroslav Kysela Date: Fri, 27 May 2022 12:28:13 +0000 (+0200) Subject: ucm: fix the reload call (snd_use_case_mgr_reload) X-Git-Tag: v1.2.7~1 X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=0418fd32c76228bc795d7968a12e3ad5337e40e9;p=alsa-lib.git ucm: fix the reload call (snd_use_case_mgr_reload) Handle the local configuration and macros trees properly. Signed-off-by: Jaroslav Kysela --- 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);