diff options
author | Jaroslav Kysela <perex@perex.cz> | 2022-11-15 17:25:59 +0100 |
---|---|---|
committer | Jaroslav Kysela <perex@perex.cz> | 2022-11-15 17:28:39 +0100 |
commit | 8b64f22459b6c55ec54f985f35ff701e18800616 (patch) | |
tree | 0957108f1d01de7b34d49f5241130d6a0eb57b33 | |
parent | a0836e2af1f2c37b66e723d8caf399e80b76825b (diff) | |
download | alsa-lib-8b64f22459b6c55ec54f985f35ff701e18800616.tar.gz |
ucm: clarify set_defaults calls
- do full reset in snd_use_case_mgr_reload
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
-rw-r--r-- | src/ucm/main.c | 36 |
1 files changed, 25 insertions, 11 deletions
diff --git a/src/ucm/main.c b/src/ucm/main.c index 28c60565..4f36648c 100644 --- a/src/ucm/main.c +++ b/src/ucm/main.c @@ -998,13 +998,14 @@ static int add_auto_values(snd_use_case_mgr_t *uc_mgr) /** * \brief execute default commands * \param uc_mgr Use case manager + * \param force Force run * \return zero on success, otherwise a negative error code */ -static int set_defaults(snd_use_case_mgr_t *uc_mgr) +static int set_defaults(snd_use_case_mgr_t *uc_mgr, bool force) { int err; - if (uc_mgr->default_list_executed) + if (!force && uc_mgr->default_list_executed) return 0; err = execute_sequence(uc_mgr, NULL, &uc_mgr->default_list, &uc_mgr->value_list, NULL, NULL); @@ -1351,7 +1352,7 @@ static int set_verb(snd_use_case_mgr_t *uc_mgr, int err; if (enable) { - err = set_defaults(uc_mgr); + err = set_defaults(uc_mgr, false); if (err < 0) return err; seq = &verb->enable_list; @@ -1436,6 +1437,22 @@ static int set_device(snd_use_case_mgr_t *uc_mgr, } /** + * \brief Do the full reset + * \param uc_mgr Use case manager + * \return zero on success, otherwise a negative error code + */ +static int do_reset(snd_use_case_mgr_t *uc_mgr) +{ + int err; + + err = set_defaults(uc_mgr, true); + INIT_LIST_HEAD(&uc_mgr->active_modifiers); + INIT_LIST_HEAD(&uc_mgr->active_devices); + uc_mgr->active_verb = NULL; + return err; +} + +/** * \brief Parse open arguments * \param uc_mgr Use case manager * \param name name of card to open @@ -1569,6 +1586,8 @@ int snd_use_case_mgr_reload(snd_use_case_mgr_t *uc_mgr) pthread_mutex_lock(&uc_mgr->mutex); + do_reset(uc_mgr); + uc_mgr_free_verb(uc_mgr); uc_mgr->default_list_executed = 0; @@ -1633,8 +1652,7 @@ static int dismantle_use_case(snd_use_case_mgr_t *uc_mgr) } uc_mgr->active_verb = NULL; - err = execute_sequence(uc_mgr, NULL, &uc_mgr->default_list, - &uc_mgr->value_list, NULL, NULL); + err = set_defaults(uc_mgr, true); return err; } @@ -1649,11 +1667,7 @@ int snd_use_case_mgr_reset(snd_use_case_mgr_t *uc_mgr) int err; pthread_mutex_lock(&uc_mgr->mutex); - err = execute_sequence(uc_mgr, NULL, &uc_mgr->default_list, - &uc_mgr->value_list, NULL, NULL); - INIT_LIST_HEAD(&uc_mgr->active_modifiers); - INIT_LIST_HEAD(&uc_mgr->active_devices); - uc_mgr->active_verb = NULL; + err = do_reset(uc_mgr); pthread_mutex_unlock(&uc_mgr->mutex); return err; } @@ -2512,7 +2526,7 @@ static int set_defaults_user(snd_use_case_mgr_t *uc_mgr, uc_error("error: wrong value for _defaults (%s)", value); return -EINVAL; } - return set_defaults(uc_mgr); + return set_defaults(uc_mgr, false); } static int handle_transition_verb(snd_use_case_mgr_t *uc_mgr, |