diff options
author | Andreas Sturmlechner <asturm@gentoo.org> | 2024-09-02 21:34:36 +0200 |
---|---|---|
committer | Andreas Sturmlechner <asturm@gentoo.org> | 2024-09-02 22:13:19 +0200 |
commit | c030d1c36dc9744564649cadfd55c3cb4085f680 (patch) | |
tree | 1aa118be407ef9b3f470a52d9e93517a8deebcac /kde-plasma/kpipewire | |
parent | kde-plasma/kwin: Add various 6.1.5 backports (diff) | |
download | gentoo-c030d1c36dc9744564649cadfd55c3cb4085f680.tar.gz gentoo-c030d1c36dc9744564649cadfd55c3cb4085f680.tar.bz2 gentoo-c030d1c36dc9744564649cadfd55c3cb4085f680.zip |
kde-plasma/kpipewire: Backport segfault/crash fixes from 6.1.5
See also:
https://invent.kde.org/plasma/kpipewire/-/merge_requests/162
https://invent.kde.org/plasma/kpipewire/-/merge_requests/167
Signed-off-by: Andreas Sturmlechner <asturm@gentoo.org>
Diffstat (limited to 'kde-plasma/kpipewire')
3 files changed, 133 insertions, 0 deletions
diff --git a/kde-plasma/kpipewire/files/kpipewire-6.1.4-avoid-segfault.patch b/kde-plasma/kpipewire/files/kpipewire-6.1.4-avoid-segfault.patch new file mode 100644 index 000000000000..eb4fa8b4f447 --- /dev/null +++ b/kde-plasma/kpipewire/files/kpipewire-6.1.4-avoid-segfault.patch @@ -0,0 +1,42 @@ +From 32628055172430a5b06a3ec5724d774290e86fd6 Mon Sep 17 00:00:00 2001 +From: Akseli Lahtinen <akselmo@akselmo.dev> +Date: Mon, 12 Aug 2024 08:20:50 +0000 +Subject: [PATCH] pipewireproduce.cpp: Add guard to m_stream + +After multiple consecutive KRDP sessions, +m_stream can be null, so add a guard to it to avoid segfault. + + +(cherry picked from commit c9c8c1a7410463c98bab1d9b47abb71a80804258) + +96dc2be6 pipewireproduce.cpp: Add guard to m_stream +a3afdd53 Destroy queued connection if no m_stream or m_encoder is found +6de6cb8f Simplify code + +Co-authored-by: Akseli Lahtinen <akselmo@akselmo.dev> +--- + src/pipewireproduce.cpp | 8 +++++--- + 1 file changed, 5 insertions(+), 3 deletions(-) + +diff --git a/src/pipewireproduce.cpp b/src/pipewireproduce.cpp +index 8fbf366..8bdcb91 100644 +--- a/src/pipewireproduce.cpp ++++ b/src/pipewireproduce.cpp +@@ -152,9 +152,11 @@ void PipeWireProduce::deactivate() + { + m_deactivated = true; + +- auto streamState = m_stream->state(); +- +- m_stream->setActive(false); ++ auto streamState = PW_STREAM_STATE_PAUSED; ++ if (m_stream) { ++ streamState = m_stream->state(); ++ m_stream->setActive(false); ++ } + + // If we have not been initialized properly before, ensure we still run any + // cleanup code and exit the thread, otherwise we risk applications not closing +-- +GitLab + diff --git a/kde-plasma/kpipewire/files/kpipewire-6.1.4-dont-process-null-streams.patch b/kde-plasma/kpipewire/files/kpipewire-6.1.4-dont-process-null-streams.patch new file mode 100644 index 000000000000..d04b15ef5e76 --- /dev/null +++ b/kde-plasma/kpipewire/files/kpipewire-6.1.4-dont-process-null-streams.patch @@ -0,0 +1,39 @@ +From dd08a7afd5957d8ae74cd0d1cb07d6e0f755ae9a Mon Sep 17 00:00:00 2001 +From: Aleix Pol Gonzalez <aleixpol@kde.org> +Date: Mon, 19 Aug 2024 10:13:01 +0000 +Subject: [PATCH] sourcestream: Do not process null streams + +We have a callback that tells us that a stream has been destroyed and so +we clean it up. Now we shouldn't process streams after this happened, +otherwise we crash. + + +(cherry picked from commit b526691684b004ff12fe52d8d86f77c21dedc996) + +Co-authored-by: Aleix Pol <aleixpol@kde.org> +--- + src/pipewiresourcestream.cpp | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/src/pipewiresourcestream.cpp b/src/pipewiresourcestream.cpp +index f4fc63e..6f8242a 100644 +--- a/src/pipewiresourcestream.cpp ++++ b/src/pipewiresourcestream.cpp +@@ -685,6 +685,14 @@ void PipeWireSourceStream::coreFailed(const QString &errorMessage) + + void PipeWireSourceStream::process() + { ++#if !PW_CHECK_VERSION(0, 3, 73) ++ if (Q_UNLIKELY(!d->pwStream)) { ++ // Assuming it's caused by https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/3314 ++ qCDebug(PIPEWIRE_LOGGING) << "stream was terminated before processing buffer"; ++ return; ++ } ++#endif ++ + pw_buffer *buf = pw_stream_dequeue_buffer(d->pwStream); + if (!buf) { + qCDebug(PIPEWIRE_LOGGING) << "out of buffers"; +-- +GitLab + diff --git a/kde-plasma/kpipewire/kpipewire-6.1.4-r2.ebuild b/kde-plasma/kpipewire/kpipewire-6.1.4-r2.ebuild new file mode 100644 index 000000000000..90d1d97139cd --- /dev/null +++ b/kde-plasma/kpipewire/kpipewire-6.1.4-r2.ebuild @@ -0,0 +1,52 @@ +# Copyright 1999-2024 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +ECM_TEST="true" +PVCUT=$(ver_cut 1-3) +KFMIN=6.5.0 +QTMIN=6.7.2 +inherit ecm plasma.kde.org + +DESCRIPTION="Components relating to Flatpak pipewire use in Plasma" + +LICENSE="LGPL-2.1+" +SLOT="6" +KEYWORDS="~amd64 ~arm64 ~ppc64 ~riscv ~x86" +IUSE="" + +RESTRICT="test" # bug 926511, fixed in 6.2 + +COMMON_DEPEND=" + >=dev-qt/qtbase-${QTMIN}:6[dbus,gui] + >=dev-qt/qtdeclarative-${QTMIN}:6 + >=kde-frameworks/kcoreaddons-${KFMIN}:6 + >=kde-frameworks/ki18n-${KFMIN}:6 + media-libs/libepoxy + media-libs/libglvnd + media-libs/libva:= + media-libs/mesa[opengl] + media-video/ffmpeg:= + >=media-video/pipewire-0.3:= + x11-libs/libdrm +" +DEPEND="${COMMON_DEPEND} + test? ( + dev-libs/plasma-wayland-protocols + dev-libs/wayland + >=dev-qt/qtwayland-${QTMIN}:6 + >=kde-plasma/kwayland-${PVCUT}:6 + media-video/pipewire[extra] + ) +" +RDEPEND="${COMMON_DEPEND} + >=kde-frameworks/kirigami-${KFMIN}:6 + x11-themes/sound-theme-freedesktop +" +BDEPEND="test? ( >=dev-qt/qtwayland-${QTMIN}:6 )" + +PATCHES=( + "${FILESDIR}/${P}-avoid-segfault.patch" + "${FILESDIR}/${P}-dont-process-null-streams" +) |