From 0418fd32c76228bc795d7968a12e3ad5337e40e9 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Fri, 27 May 2022 14:28:13 +0200 Subject: [PATCH] ucm: fix the reload call (snd_use_case_mgr_reload) Handle the local configuration and macros trees properly. Signed-off-by: Jaroslav Kysela --- src/ucm/main.c | 8 -------- src/ucm/parser.c | 8 ++++++++ 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); -- 2.47.1