commit:     c030d1c36dc9744564649cadfd55c3cb4085f680
Author:     Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
AuthorDate: Mon Sep  2 19:34:36 2024 +0000
Commit:     Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
CommitDate: Mon Sep  2 20:13:19 2024 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=c030d1c3

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 <AT> gentoo.org>

 .../files/kpipewire-6.1.4-avoid-segfault.patch     | 42 +++++++++++++++++
 ...kpipewire-6.1.4-dont-process-null-streams.patch | 39 ++++++++++++++++
 kde-plasma/kpipewire/kpipewire-6.1.4-r2.ebuild     | 52 ++++++++++++++++++++++
 3 files changed, 133 insertions(+)

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 <[email protected]>
+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 <[email protected]>
+---
+ 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 <[email protected]>
+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 <[email protected]>
+---
+ 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"
+)

Reply via email to