summaryrefslogtreecommitdiff
path: root/kde-frameworks/kjobwidgets
diff options
context:
space:
mode:
authorV3n3RiX <venerix@koprulu.sector>2022-07-26 14:59:08 +0100
committerV3n3RiX <venerix@koprulu.sector>2022-07-26 14:59:08 +0100
commit1503b28e7a30c164cab750c27268f704b8a5cec6 (patch)
treed06a47a18b0fb792e95f88ea6e18af234eb0b9d5 /kde-frameworks/kjobwidgets
parent34ce8f465101950c92cb66c657d3244b5a8397db (diff)
gentoo auto-resync : 26:07:2022 - 14:59:07
Diffstat (limited to 'kde-frameworks/kjobwidgets')
-rw-r--r--kde-frameworks/kjobwidgets/Manifest2
-rw-r--r--kde-frameworks/kjobwidgets/files/kjobwidgets-5.96.0-fix-ui-server-crash.patch82
-rw-r--r--kde-frameworks/kjobwidgets/kjobwidgets-5.96.0-r1.ebuild42
3 files changed, 126 insertions, 0 deletions
diff --git a/kde-frameworks/kjobwidgets/Manifest b/kde-frameworks/kjobwidgets/Manifest
index 70895772df40..ab6417786fa9 100644
--- a/kde-frameworks/kjobwidgets/Manifest
+++ b/kde-frameworks/kjobwidgets/Manifest
@@ -1,5 +1,7 @@
+AUX kjobwidgets-5.96.0-fix-ui-server-crash.patch 3545 BLAKE2B 2647b1e300997a7c83c480e47c0495afbc8575d9d705882663f39dfe27156377b25f00ae59a4cd74f4d4114b33c02cb647af9475513e4b29f8ab59f21e0e0c72 SHA512 3ec987ee9dd4a2ab40f3a5e82694982461ca575f835e36d94ca417f35e76dda0c4de619411783b3b636c84541beb1bc12d0334976fc36deb7b7581bb238414cc
DIST kjobwidgets-5.92.0.tar.xz 101620 BLAKE2B 29eb6b131ca2c858ee416afab137ed84b1f1e00039673794418bb352ed656df13e91e2b47a98d1b6dd933034e0fb5dad44fa021aaa6ac0c84913f8cd733cde1f SHA512 6bd21dc93146ded88981bf61c1365c333c9ba369ac358ef4b5b06c2d26f0e6cac7880ecad27cd7cd950cf1b502c9202ced6c66fcdb78b7cacec1da6a92558976
DIST kjobwidgets-5.96.0.tar.xz 101704 BLAKE2B 98f647b2bc7266364c05f5e57ddefbb60b8a16260f83abac4b33d7819987b2083029c14d78e49f6cd1fd5e087a343b11893e30d45c496e345fe98d67465055b5 SHA512 17fb818efa4f241a3e8248b81ba16c3a879b0580eb3a33efc19983faa5b39959e0cb1032b9044e953accd13ad93c028bfc619c49b26076416f707e6ea9480510
EBUILD kjobwidgets-5.92.0.ebuild 779 BLAKE2B 799eb93717845cf4301b8fbf639c69f3e064bfc4d9689ae6683c76ac336d25812d9f2f658202b8f7cb413c99cf19a0f4d041766a00e092eaf4e0a7c189f3d7cf SHA512 ecb9ad26a6feca68ac8fecee6a7873fb103f3a83ed35b82c3004917c2431b357ccf363a7ec2293d913810ab8d0c0f52e024a8f3015b5f3fe24465f6a88b68afc
+EBUILD kjobwidgets-5.96.0-r1.ebuild 876 BLAKE2B 8a83c78e1d3571e3f98bdcb53e1e2da21ece36a5cdbaec9cd89fca5c833efc0c8160ea8906cd7e8dafd687707d30569dec9e2b79e4f7d1052350726ee24a1586 SHA512 897a64b089c63029316b9e805f0074f41d268ef26206c75bfa3b8b5985a785ea28b1c24467cbe02c8c57a2e1a4c1a34c581580ea1d84ac02bed959def52c407e
EBUILD kjobwidgets-5.96.0.ebuild 800 BLAKE2B 1c5b6c791953aa47f46f593d275422c4bf0b356c7a205f87533a57582240b5c7c89654f188cea8976fab8f155ccb62a3b75c3c3a6134044d80d8f43ca169e3f3 SHA512 bc29348b23b470b28e354e9adb561c0a23ea96b414b229c14a57002b53653449d382a3774235356b8677c3dd0e74340322199b8cc6778881fe8180b9f51323e9
MISC metadata.xml 456 BLAKE2B 4392b1cc6f304778d71236d5eb557dfbbd530143eea5cad9a3c3034e3e8b22c835f6c7f980124a21cefd35a2dd1efd5110adc0a5342170f88dfd7418b12bee99 SHA512 7ba65331cad434e2dceee012a5458d268eb2a04e0f7276b265c15644e6db5209bc7eee7d9695aa0038c435711e0f6f0dc53c7bae9d773b48f01e22a22e4dbb80
diff --git a/kde-frameworks/kjobwidgets/files/kjobwidgets-5.96.0-fix-ui-server-crash.patch b/kde-frameworks/kjobwidgets/files/kjobwidgets-5.96.0-fix-ui-server-crash.patch
new file mode 100644
index 000000000000..463daf84f573
--- /dev/null
+++ b/kde-frameworks/kjobwidgets/files/kjobwidgets-5.96.0-fix-ui-server-crash.patch
@@ -0,0 +1,82 @@
+From 5aeba3f01ef8cdf723813cacdd29945328288663 Mon Sep 17 00:00:00 2001
+From: Michael Pyne <mpyne@kde.org>
+Date: Sat, 2 Jul 2022 17:57:10 -0400
+Subject: [PATCH] ui-server: Fix crash by only re-registering live KJobs.
+
+This addresses a frequently-reported crash in the job tracker for
+KUiServerV2 that occurs when attempting to re-register new job views for
+active KJobs after a new UI server comes online.
+
+Although I have not been able to reproduce the crash myself, (by
+attempting to use both long-lived and short-lived file transfers from
+Dolphin and restarting plasmashell), inspection of the code shows that
+it is possible for there to be deleted KJobs pointing to JobView objects
+during some portions of the job tracker's lifetime.
+
+The current code deals with this in situations including DBus calls to
+create a U/I view for a KJob (the KJob may terminate before the DBus
+reply is received) and even a short delay that can be optionally
+introduced (the KJob may terminate before the delay elapses). A
+QPointer<KJob> is used as a guard in these situations, but there is no
+similar guard for the re-registration code.
+
+In this case we cannot use QPointer<KJob> to guard the job's lifetime
+because the KJob must be alive when the QPointer<KJob> is created, and
+this crash occurs when the KJob is terminated. However the KJob's
+destruction should lead to the unregisterJob() function being called,
+which handles removing the terminated KJob from the map of job views
+with only one exception, where instead the job view for the KJob has its
+"terminated" pending status set.
+
+So the fix here checks for the "terminated" state in the same way as
+performed in requestView(), and if the KJob is terminated, handles
+requesting the job view to terminate the U/I and finally removing the
+terminated KJob from the map of job views.
+
+By doing this, we avoid passing a deleted KJob to the registerJob()
+function, which will attempt to dereference it and crash the
+application.
+
+See also merge request !22
+
+BUG:450325
+---
+ src/kuiserverv2jobtracker.cpp | 20 ++++++++++++++++----
+ 1 file changed, 16 insertions(+), 4 deletions(-)
+
+diff --git a/src/kuiserverv2jobtracker.cpp b/src/kuiserverv2jobtracker.cpp
+index 737c880..3592618 100644
+--- a/src/kuiserverv2jobtracker.cpp
++++ b/src/kuiserverv2jobtracker.cpp
+@@ -209,12 +209,24 @@ void KUiServerV2JobTracker::registerJob(KJob *job)
+
+ const auto oldState = view.currentState;
+
+- delete view.jobView;
+- d->jobViews.remove(job);
++ // It is possible that the KJob has been deleted already so do not
++ // use or deference if marked as terminated
++ if (oldState.value(QStringLiteral("terminated")).toBool()) {
++ const uint errorCode = oldState.value(QStringLiteral("errorCode")).toUInt();
++ const QString errorMessage = oldState.value(QStringLiteral("errorMessage")).toString();
+
+- registerJob(job);
++ view.jobView->terminate(errorCode, errorMessage, QVariantMap() /*hints*/);
+
+- d->jobViews[job].currentState = oldState;
++ delete view.jobView;
++ d->jobViews.remove(job);
++ } else {
++ delete view.jobView;
++ d->jobViews.remove(job); // must happen before registerJob
++
++ registerJob(job);
++
++ d->jobViews[job].currentState = oldState;
++ }
+ }
+ });
+ }
+--
+GitLab
+
diff --git a/kde-frameworks/kjobwidgets/kjobwidgets-5.96.0-r1.ebuild b/kde-frameworks/kjobwidgets/kjobwidgets-5.96.0-r1.ebuild
new file mode 100644
index 000000000000..d52076a835bf
--- /dev/null
+++ b/kde-frameworks/kjobwidgets/kjobwidgets-5.96.0-r1.ebuild
@@ -0,0 +1,42 @@
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PVCUT=$(ver_cut 1-2)
+QTMIN=5.15.4
+inherit ecm frameworks.kde.org
+
+DESCRIPTION="Framework providing assorted widgets for showing the progress of jobs"
+
+LICENSE="LGPL-2+"
+KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc64 ~riscv ~x86"
+IUSE="nls X"
+
+RDEPEND="
+ >=dev-qt/qtdbus-${QTMIN}:5
+ >=dev-qt/qtgui-${QTMIN}:5
+ >=dev-qt/qtwidgets-${QTMIN}:5
+ =kde-frameworks/kcoreaddons-${PVCUT}*:5
+ =kde-frameworks/kwidgetsaddons-${PVCUT}*:5
+ X? ( >=dev-qt/qtx11extras-${QTMIN}:5 )
+"
+DEPEND="${RDEPEND}
+ X? (
+ x11-base/xorg-proto
+ x11-libs/libX11
+ )
+"
+BDEPEND="
+ nls? ( >=dev-qt/linguist-tools-${QTMIN}:5 )
+"
+
+PATCHES=( "${FILESDIR}/${P}-fix-ui-server-crash.patch" ) # KDE-bug 450325
+
+src_configure() {
+ local mycmakeargs=(
+ $(cmake_use_find_package X X11)
+ )
+
+ ecm_src_configure
+}