pulseaudio rebuild

This commit is contained in:
Rmys
2024-12-10 18:38:52 +03:00
parent 248b08fff8
commit 4a94a5212f
3 changed files with 77 additions and 2 deletions
+5
View File
@@ -33,6 +33,11 @@ j = ''.join([
])
def setup():
shelltools.cd("%s" % get.workDIR())
shelltools.move("pulseaudio-*", "pulseaudio-%s" % get.srcVERSION())
shelltools.cd("pulseaudio-%s" % get.srcVERSION())
shelltools.echo(".tarball-version", get.srcVERSION())
options = "%s" % i
if get.buildTYPE() == "emul32":
@@ -0,0 +1,63 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Alper Nebi Yasak <alpernebiyasak@gmail.com>
Date: Wed, 4 Dec 2024 17:34:45 +0300
Subject: [PATCH] alsa-ucm: Fix segfault from recursion due to too many devices
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.
Signed-off-by: Alper Nebi Yasak <alpernebiyasak@gmail.com>
---
src/modules/alsa/alsa-ucm.c | 22 ++++++++++------------
1 file changed, 10 insertions(+), 12 deletions(-)
diff --git a/src/modules/alsa/alsa-ucm.c b/src/modules/alsa/alsa-ucm.c
index 018c01739ba0..34a9d30ade48 100644
--- a/src/modules/alsa/alsa-ucm.c
+++ b/src/modules/alsa/alsa-ucm.c
@@ -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;
+ }
}
}
+9 -2
View File
@@ -15,7 +15,7 @@
<IsA>library</IsA>
<Summary>A networked sound server with an advanced plugin system</Summary>
<Description>pulseaudio is a sound server for POSIX and Win32 systems. It allows you to do advanced operations on your sound data as it passes between your application and your hardware.</Description>
<Archive sha1sum="1b19adc2d546d5775bb05c1a8cd52f68a9c9def1" type="tarxz">https://www.freedesktop.org/software/pulseaudio/releases/pulseaudio-17.0.tar.xz</Archive>
<Archive sha1sum="66707569d528f2712c5d420d4a27d3e574c67fa1" type="tarbz2">https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/archive/3e2bb8a1ece02ae4e2c217273c9c0929cb9f5cae/pulseaudio-3e2bb8a1ece02ae4e2c217273c9c0929cb9f5cae.tar.bz2</Archive>
<BuildDependencies>
<Dependency>meson</Dependency>
<Dependency>bluez</Dependency>
@@ -53,7 +53,7 @@
<Dependency>jack-audio-connection-kit-devel</Dependency>
</BuildDependencies>
<Patches>
<Patch level="1">gentoo/pulseaudio-17.0-backport-pr807.patch</Patch>
<Patch level="1">0001-alsa-ucm-Fix-segfault-from-recursion-due-to-too-many.patch</Patch>
</Patches>
</Source>
@@ -226,6 +226,13 @@
</Package>
<History>
<Update release="21">
<Date>2024-12-10</Date>
<Version>17.0</Version>
<Comment>Rebuild.</Comment>
<Name>Pisi Linux Community</Name>
<Email>admin@pisilinux.org</Email>
</Update>
<Update release="20">
<Date>2024-08-10</Date>
<Version>17.0</Version>