[pulseaudio-commits] src/modules

Tanu Kaskinen tanuk at kemper.freedesktop.org
Mon Aug 18 03:47:52 PDT 2014


 src/modules/alsa/alsa-mixer.c |   26 +++++++++++++-------------
 1 file changed, 13 insertions(+), 13 deletions(-)

New commits:
commit facfd3a6644711d32ecfd755d30a351b8ee61620
Author: Tanu Kaskinen <tanu.kaskinen at linux.intel.com>
Date:   Sun Aug 17 14:52:29 2014 +0300

    alsa-mixer: Fix path subset detection
    
    The old logic assumed that if path A was a subset of path B, the
    element list in B would have all elements of A in the beginning of
    B's list, in the same order as A. This assumption was invalid, causing
    some subset cases to not get detected. We need to search through the
    full element list of B every time before we can conclude that B
    doesn't have the element that we're inspecting.

diff --git a/src/modules/alsa/alsa-mixer.c b/src/modules/alsa/alsa-mixer.c
index b4f4bbd..4871523 100644
--- a/src/modules/alsa/alsa-mixer.c
+++ b/src/modules/alsa/alsa-mixer.c
@@ -3218,21 +3218,21 @@ static void path_set_condense(pa_alsa_path_set *ps, snd_mixer_t *m) {
             }
 
             /* Compare the elements of each set... */
-            ea = p->elements;
-            eb = p2->elements;
+            PA_LLIST_FOREACH(ea, p->elements) {
+                bool found_matching_element = false;
 
-            while (is_subset) {
-                if (!ea && !eb)
+                if (!is_subset)
                     break;
-                else if ((ea && !eb) || (!ea && eb))
-                    is_subset = false;
-                else if (pa_streq(ea->alsa_name, eb->alsa_name)) {
-                    if (element_is_subset(ea, eb, m)) {
-                        ea = ea->next;
-                        eb = eb->next;
-                    } else
-                        is_subset = false;
-                } else
+
+                PA_LLIST_FOREACH(eb, p2->elements) {
+                    if (pa_streq(ea->alsa_name, eb->alsa_name)) {
+                        found_matching_element = true;
+                        is_subset = element_is_subset(ea, eb, m);
+                        break;
+                    }
+                }
+
+                if (!found_matching_element)
                     is_subset = false;
             }
 



More information about the pulseaudio-commits mailing list