mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2026-02-10 04:27:48 -05:00
While trying to figure out device subsets that have aren't internally contain conflicting devices, we walk through all possible subsets and check each set if it satisfies ConflictingDevices/SupportedDevices listed in UCM configuration. For a better user experience, we want to skip subsets that are fully included in another valid subset we will also generate. The iterate_device_subsets() function that achieves the former is intentionally in iterative form to avoid a stack overflow, since it will walk through 2^n sets. However, the iterate_maximal_device_subsets() function that skips incomplete sets is in recursive form, as I had assumed tail-call optimization would take care of the potential problem. Convert iterate_maximal_device_subsets() to an iterative form, because the recursion seems to trigger a segfault with more than 16 devices on PulseAudio. It doesn't seem to happen on PipeWire, but it's better to not leave it to luck. Link: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/838 Signed-off-by: Alper Nebi Yasak <alpernebiyasak@gmail.com> |
||
|---|---|---|
| .. | ||
| acp.c | ||
| acp.h | ||
| alsa-mixer.c | ||
| alsa-mixer.h | ||
| alsa-ucm.c | ||
| alsa-ucm.h | ||
| alsa-util.c | ||
| alsa-util.h | ||
| array.h | ||
| card.h | ||
| channelmap.h | ||
| compat.c | ||
| compat.h | ||
| conf-parser.c | ||
| conf-parser.h | ||
| device-port.h | ||
| dynarray.h | ||
| hashmap.h | ||
| idxset.h | ||
| llist.h | ||
| meson.build | ||
| proplist.h | ||
| volume.h | ||