diff options
author | Andreas Sturmlechner <asturm@gentoo.org> | 2024-11-05 23:48:47 +0100 |
---|---|---|
committer | Andreas Sturmlechner <asturm@gentoo.org> | 2024-11-05 23:50:03 +0100 |
commit | 3f422998c2f5436dca345f6e37efebee09b34488 (patch) | |
tree | a3f2a4f87e98bcca1242bc8123603683b5eb01eb | |
parent | kde-plasma/kdesu-gui: Fix build w/ kde-frameworks/kwindowsystem[-X] (diff) | |
download | gentoo-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.patch | 69 | ||||
-rw-r--r-- | kde-frameworks/solid/solid-6.7.0-r1.ebuild | 50 |
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 +} |