From c4dcba898a9711a165ab5d839730e44560a48055 Mon Sep 17 00:00:00 2001 From: David Edmundson Date: Thu, 20 Dec 2018 22:42:36 +0000 Subject: [PATCH] [kuiserver] Avoid double warning on terminated jobs Summary: When a job is terminated, it isn't necessarily removed from the job owners queue to handle pending requests. If a service unregisters and the job is already finished, we don't want to mark it as an error. Test Plan: kioclient5 (when running with fixed interactive-ness) quits when there's an error. We used to always show the client died error. Reviewers: #plasma, broulik Reviewed By: #plasma, broulik Subscribers: broulik, plasma-devel Tags: #plasma Differential Revision: https://phabricator.kde.org/D17711 --- kuiserver/jobview.cpp | 6 ++++++ kuiserver/jobview.h | 1 + kuiserver/progresslistmodel.cpp | 3 +++ 3 files changed, 10 insertions(+) diff --git a/kuiserver/jobview.cpp b/kuiserver/jobview.cpp index 01715959d..502daff33 100644 --- a/kuiserver/jobview.cpp +++ b/kuiserver/jobview.cpp @@ -53,6 +53,7 @@ JobView::~JobView() void JobView::terminate(const QString &errorMessage) { + qDebug() << "is terminated" << errorMessage; QDBusConnection::sessionBus().unregisterObject(m_objectPath.path(), QDBusConnection::UnregisterTree); typedef QPair iFacePair; @@ -77,6 +78,11 @@ void JobView::terminate(const QString &errorMessage) m_isTerminated = true; } +bool JobView::isTerminated() const +{ + return m_isTerminated; +} + void JobView::requestSuspend() { emit suspendRequested(); diff --git a/kuiserver/jobview.h b/kuiserver/jobview.h index d0997d051..a580a4db7 100644 --- a/kuiserver/jobview.h +++ b/kuiserver/jobview.h @@ -109,6 +109,7 @@ public: QDBusObjectPath objectPath() const; + bool isTerminated() const; /** diff --git a/kuiserver/progresslistmodel.cpp b/kuiserver/progresslistmodel.cpp index 31f3fd262..7862a2de6 100644 --- a/kuiserver/progresslistmodel.cpp +++ b/kuiserver/progresslistmodel.cpp @@ -325,6 +325,9 @@ void ProgressListModel::serviceUnregistered(const QString &name) if (!jobs.isEmpty()) { m_jobViewsOwners.remove(name); Q_FOREACH(JobView *job, jobs) { + if (job->isTerminated()) { + continue; + } job->setError(KIO::ERR_SLAVE_DIED); job->terminate(job->errorText()); }