mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-10-29 05:40:23 -04:00
Merge branch 'alsa-ucm-fix-infinite-recursion' into 'master'
alsa-ucm: Fix segfault from recursion due to too many devices See merge request pulseaudio/pulseaudio!838
This commit is contained in:
commit
0a25cfb533
1 changed files with 10 additions and 12 deletions
|
|
@ -1404,22 +1404,20 @@ static pa_idxset *iterate_device_subsets(pa_idxset *devices, void **state) {
|
|||
static pa_idxset *iterate_maximal_device_subsets(pa_idxset *devices, void **state) {
|
||||
uint32_t idx;
|
||||
pa_alsa_ucm_device *dev;
|
||||
pa_idxset *subset;
|
||||
pa_idxset *subset = NULL;
|
||||
|
||||
pa_assert(devices);
|
||||
pa_assert(state);
|
||||
|
||||
subset = iterate_device_subsets(devices, state);
|
||||
if (!subset)
|
||||
return subset;
|
||||
|
||||
/* Skip this group if it's incomplete, by checking if we can add any
|
||||
* other device. If we can, this iteration is a subset of another
|
||||
* group that we already returned or eventually return. */
|
||||
PA_IDXSET_FOREACH(dev, devices, idx) {
|
||||
if (!pa_idxset_contains(subset, dev) && devset_supports_device(subset, dev)) {
|
||||
pa_idxset_free(subset, NULL);
|
||||
return iterate_maximal_device_subsets(devices, state);
|
||||
while (subset == NULL && (subset = iterate_device_subsets(devices, state))) {
|
||||
/* Skip this group if it's incomplete, by checking if we can add any
|
||||
* other device. If we can, this iteration is a subset of another
|
||||
* group that we already returned or eventually return. */
|
||||
PA_IDXSET_FOREACH(dev, devices, idx) {
|
||||
if (subset && !pa_idxset_contains(subset, dev) && devset_supports_device(subset, dev)) {
|
||||
pa_idxset_free(subset, NULL);
|
||||
subset = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue