summaryrefslogtreecommitdiff
path: root/kde-apps/print-manager/files/print-manager-19.08.3-crash-w-cups-jobs-w-duplicate-id.patch
diff options
context:
space:
mode:
Diffstat (limited to 'kde-apps/print-manager/files/print-manager-19.08.3-crash-w-cups-jobs-w-duplicate-id.patch')
-rw-r--r--kde-apps/print-manager/files/print-manager-19.08.3-crash-w-cups-jobs-w-duplicate-id.patch87
1 files changed, 0 insertions, 87 deletions
diff --git a/kde-apps/print-manager/files/print-manager-19.08.3-crash-w-cups-jobs-w-duplicate-id.patch b/kde-apps/print-manager/files/print-manager-19.08.3-crash-w-cups-jobs-w-duplicate-id.patch
deleted file mode 100644
index be4b2efd4935..000000000000
--- a/kde-apps/print-manager/files/print-manager-19.08.3-crash-w-cups-jobs-w-duplicate-id.patch
+++ /dev/null
@@ -1,87 +0,0 @@
-From c93f2f16c30d10fbd0f4bfb4c0bf0cec07a4c93b Mon Sep 17 00:00:00 2001
-From: Albert Astals Cid <aacid@kde.org>
-Date: Mon, 2 Dec 2019 23:04:42 +0100
-Subject: Fix crash when cups returns jobs with duplicate id
-
-Summary:
-For some reason my cups was giving me two withheld jobs with id 33 and two with id 40
-
-That made the JobModel code crash, because it went like this
-
- * First job with id 33 found
- * insertRow with 0 called
- * Row 0 inserted
- * Job at row 0 updated (from inside insertRow)
- * Second job with id 33 found
- * The "oh i already have this job code triggers", updates the job, then takesRow 0 and inserts at row 1. QStandardItemModel doesn't like getting a row add at 1 inserted when empty
- * First job with id 40 found
- * insertRow with 2 called
- * Row 2 inserted, it fails, QStandardItemModel doesn't like getting a row add at 2 when empty
- * Job at row 2 updated (from iniside insertRow)
- * Crash because there's no row 2 in the model
-
-BUGS: 326289
-
-Test Plan: Doesn't crash anymore with my weird cups list of pending jobs
-
-Reviewers: dantti
-
-Reviewed By: dantti
-
-Subscribers: ngraham, marcelm, fvogt, broulik, nicolasfella, kmaterka, kde-utils-devel
-
-Differential Revision: https://phabricator.kde.org/D25623
----
- libkcups/JobModel.cpp | 23 +++++++++++++++++++++--
- 1 file changed, 21 insertions(+), 2 deletions(-)
-
-diff --git a/libkcups/JobModel.cpp b/libkcups/JobModel.cpp
-index 73c5174..3c4878b 100644
---- a/libkcups/JobModel.cpp
-+++ b/libkcups/JobModel.cpp
-@@ -174,6 +174,25 @@ void JobModel::getJobs()
- m_processingJob.clear();
- }
-
-+static KCupsJobs sanitizeJobs(KCupsJobs jobs)
-+{
-+ // For some reason sometimes cups has broken job queues with jobs with duplicated id
-+ // our model doesn't like that at all so sanitize the job list before processing it
-+ QVector<int> seenIds;
-+ int i = 0;
-+ while (i < jobs.count()) {
-+ const int jobId = jobs.at(i).id();
-+ if (seenIds.contains(jobId)) {
-+ qCWarning(LIBKCUPS) << "Found job with duplicated id" << jobId;
-+ jobs.removeAt(i);
-+ } else {
-+ seenIds << jobId;
-+ ++i;
-+ }
-+ }
-+ return jobs;
-+}
-+
- void JobModel::getJobFinished(KCupsRequest *request)
- {
- if (request) {
-@@ -181,7 +200,7 @@ void JobModel::getJobFinished(KCupsRequest *request)
- // clear the model after so that the proper widget can be shown
- clear();
- } else {
-- const KCupsJobs jobs = request->jobs();
-+ const KCupsJobs jobs = sanitizeJobs(request->jobs());
- qCDebug(LIBKCUPS) << jobs.size();
- for (int i = 0; i < jobs.size(); ++i) {
- const KCupsJob job = jobs.at(i);
-@@ -207,7 +226,7 @@ void JobModel::getJobFinished(KCupsRequest *request)
- }
- }
-
-- // remove old printers
-+ // remove old jobs
- // The above code starts from 0 and make sure
- // dest == modelIndex(x) and if it's not the
- // case it either inserts or moves it.
---
-cgit v1.1