commit:     3f422998c2f5436dca345f6e37efebee09b34488
Author:     Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
AuthorDate: Tue Nov  5 22:48:47 2024 +0000
Commit:     Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
CommitDate: Tue Nov  5 22:50:03 2024 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=3f422998

kde-frameworks/solid: Fix crash on udisks eject

KDE-bug: https://bugs.kde.org/show_bug.cgi?id=464149

Signed-off-by: Andreas Sturmlechner <asturm <AT> gentoo.org>

 .../files/solid-6.7.0-fix-crash-on-eject.patch     | 69 ++++++++++++++++++++++
 kde-frameworks/solid/solid-6.7.0-r1.ebuild         | 50 ++++++++++++++++
 2 files changed, 119 insertions(+)

diff --git a/kde-frameworks/solid/files/solid-6.7.0-fix-crash-on-eject.patch 
b/kde-frameworks/solid/files/solid-6.7.0-fix-crash-on-eject.patch
new file mode 100644
index 000000000000..4b37cec7b13a
--- /dev/null
+++ b/kde-frameworks/solid/files/solid-6.7.0-fix-crash-on-eject.patch
@@ -0,0 +1,69 @@
+From 1852a8c8460a100c3fd09021bf4b26410866def6 Mon Sep 17 00:00:00 2001
+From: Nicolas Fella <[email protected]>
+Date: Sun, 1 Sep 2024 23:19:55 +0200
+Subject: [PATCH 1/2] [udisks] Don't add/remove devices in slotMediaChanged
+
+We get notified when devices are added via InterfacesAdded/InterfacesRemoved.
+
+When ejecting from a CD drive we first get slotMediaChanged, where we
+remove the device from m_deviceCache. Then we get InterfacesRemoved
+for org.freedesktop.UDisks2.Filesystem. Because the
+org.freedesktop.UDisks2.Block interface is still there we remove and
+immediately readd the device. Then in DeviceManagerPrivate::_k_deviceAdded
+we call createBackendObject, which fails to create a backend because
+the uid is not in m_deviceCache any more. Then we assert because the
+backend is empty.
+
+CCBUG: 464149
+
+(cherry picked from commit 99510948944ecda04f9cec6b3bd94b140d191a1c)
+---
+
+From 1c76a103ebae87c99fa7461bc2760544ca0945f8 Mon Sep 17 00:00:00 2001
+From: Nicolas Fella <[email protected]>
+Date: Fri, 1 Nov 2024 17:44:39 +0100
+Subject: [PATCH 2/2] Restore MediaChanged handling for Audio CDs
+
+99510948944ecda04f9cec6b3bd94b140d191a1c removed this because
+it's unneeded for non-audio CDs and is causing problems.
+
+However without it adding or removing audio CDs isn't handled,
+so restore it, but only if there is no FileSystem interface
+(i.e. no data CD)
+
+(cherry picked from commit df5843ed76065f0e56d1189d010e10497c17f936)
+---
+ src/solid/devices/backends/udisks2/udisksmanager.cpp | 19 +++++++++++--------
+ 1 file changed, 11 insertions(+), 8 deletions(-)
+
+diff --git a/src/solid/devices/backends/udisks2/udisksmanager.cpp 
b/src/solid/devices/backends/udisks2/udisksmanager.cpp
+index 1f1a7e73..799face7 100644
+--- a/src/solid/devices/backends/udisks2/udisksmanager.cpp
++++ b/src/solid/devices/backends/udisks2/udisksmanager.cpp
+@@ -265,15 +265,18 @@ void Manager::slotMediaChanged(const QDBusMessage &msg)
+     qulonglong size = properties.value(QStringLiteral("Size")).toULongLong();
+     qCDebug(UDISKS2) << "MEDIA CHANGED in" << udi << "; size is:" << size;
+ 
+-    if (!m_deviceCache.contains(udi) && size > 0) { // we don't know the 
optdisc, got inserted
+-        m_deviceCache.append(udi);
+-        Q_EMIT deviceAdded(udi);
+-    }
++    Device device(udi);
++    if (!device.interfaces().contains(u"org.freedesktop.UDisks2.Filesystem")) 
{
++        if (!m_deviceCache.contains(udi) && size > 0) { // we don't know the 
optdisc, got inserted
++            m_deviceCache.append(udi);
++            Q_EMIT deviceAdded(udi);
++        }
+ 
+-    if (m_deviceCache.contains(udi) && size == 0) { // we know the optdisc, 
got removed
+-        Q_EMIT deviceRemoved(udi);
+-        m_deviceCache.removeAll(udi);
+-        DeviceBackend::destroyBackend(udi);
++        if (m_deviceCache.contains(udi) && size == 0) { // we know the 
optdisc, got removed
++            Q_EMIT deviceRemoved(udi);
++            m_deviceCache.removeAll(udi);
++            DeviceBackend::destroyBackend(udi);
++        }
+     }
+ }
+ 

diff --git a/kde-frameworks/solid/solid-6.7.0-r1.ebuild 
b/kde-frameworks/solid/solid-6.7.0-r1.ebuild
new file mode 100644
index 000000000000..f87091791eb3
--- /dev/null
+++ b/kde-frameworks/solid/solid-6.7.0-r1.ebuild
@@ -0,0 +1,50 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+QTMIN=6.6.2
+inherit ecm frameworks.kde.org optfeature
+
+DESCRIPTION="Provider for platform independent hardware discovery, abstraction 
and management"
+
+LICENSE="LGPL-2.1+"
+KEYWORDS="~amd64 ~arm64 ~ppc64 ~riscv ~x86"
+IUSE="ios"
+
+RDEPEND="
+       >=dev-qt/qtbase-${QTMIN}:6[dbus,gui,xml]
+       >=dev-qt/qtdeclarative-${QTMIN}:6
+       sys-apps/util-linux
+       sys-fs/udisks:2
+       virtual/libudev:=
+       ios? (
+               app-pda/libimobiledevice:=
+               app-pda/libplist:=
+       )
+"
+DEPEND="${RDEPEND}
+       test? ( >=dev-qt/qtbase-${QTMIN}:6[concurrent] )
+"
+BDEPEND="
+       app-alternatives/lex
+       app-alternatives/yacc
+       >=dev-qt/qttools-${QTMIN}:6[linguist]
+"
+
+PATCHES=( "${FILESDIR}/${P}-fix-crash-on-eject.patch" ) # KDE-bug 464149
+
+src_configure() {
+       local mycmakeargs=(
+               $(cmake_use_find_package ios IMobileDevice)
+               $(cmake_use_find_package ios PList)
+       )
+       ecm_src_configure
+}
+
+pkg_postinst() {
+       if [[ -z "${REPLACING_VERSIONS}" ]]; then
+               optfeature "media player devices support" 
app-misc/media-player-info
+       fi
+       ecm_pkg_postinst
+}

Reply via email to