summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaroslav Kysela <perex@perex.cz>2022-11-15 17:25:59 +0100
committerJaroslav Kysela <perex@perex.cz>2022-11-15 17:28:39 +0100
commit8b64f22459b6c55ec54f985f35ff701e18800616 (patch)
tree0957108f1d01de7b34d49f5241130d6a0eb57b33
parenta0836e2af1f2c37b66e723d8caf399e80b76825b (diff)
downloadalsa-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.c36
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,