summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Sturmlechner <asturm@gentoo.org>2024-11-05 23:48:47 +0100
committerAndreas Sturmlechner <asturm@gentoo.org>2024-11-05 23:50:03 +0100
commit3f422998c2f5436dca345f6e37efebee09b34488 (patch)
treea3f2a4f87e98bcca1242bc8123603683b5eb01eb
parentkde-plasma/kdesu-gui: Fix build w/ kde-frameworks/kwindowsystem[-X] (diff)
downloadgentoo-3f422998c2f5436dca345f6e37efebee09b34488.tar.gz
gentoo-3f422998c2f5436dca345f6e37efebee09b34488.tar.bz2
gentoo-3f422998c2f5436dca345f6e37efebee09b34488.zip
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@gentoo.org>
-rw-r--r--kde-frameworks/solid/files/solid-6.7.0-fix-crash-on-eject.patch69
-rw-r--r--kde-frameworks/solid/solid-6.7.0-r1.ebuild50
2 files changed, 119 insertions, 0 deletions
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 <nicolas.fella@gmx.de>
+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 <nicolas.fella@gmx.de>
+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
+}