]> git.alsa-project.org Git - alsa-lib.git/commitdiff
ucm: clarify set_defaults calls
authorJaroslav Kysela <perex@perex.cz>
Tue, 15 Nov 2022 16:25:59 +0000 (17:25 +0100)
committerJaroslav Kysela <perex@perex.cz>
Tue, 15 Nov 2022 16:28:39 +0000 (17:28 +0100)
- do full reset in snd_use_case_mgr_reload

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
src/ucm/main.c

index 28c605652783ecf88c3c7c7dd1c65d9d73c1fa2b..4f36648cfeafd2c08e11ba24f21645e18042c2f8 100644 (file)
@@ -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;
@@ -1435,6 +1436,22 @@ static int set_device(snd_use_case_mgr_t *uc_mgr,
        return err;
 }
 
+/**
+ * \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
@@ -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,