diff options
author | V3n3RiX <venerix@koprulu.sector> | 2022-07-26 14:59:08 +0100 |
---|---|---|
committer | V3n3RiX <venerix@koprulu.sector> | 2022-07-26 14:59:08 +0100 |
commit | 1503b28e7a30c164cab750c27268f704b8a5cec6 (patch) | |
tree | d06a47a18b0fb792e95f88ea6e18af234eb0b9d5 /kde-frameworks/kjobwidgets | |
parent | 34ce8f465101950c92cb66c657d3244b5a8397db (diff) |
gentoo auto-resync : 26:07:2022 - 14:59:07
Diffstat (limited to 'kde-frameworks/kjobwidgets')
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 +} |