mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-11-04 13:29:59 -05:00
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.
This commit is contained in:
parent
97d9f4c5dd
commit
facfd3a664
1 changed files with 13 additions and 13 deletions
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue