File 0001-Avoid-crash-in-plasma-session-teardown.patch of Package plasma5-workspace.17560
From effe12a06dbdfaa53a3f74c71f03a3dfa1e00de2 Mon Sep 17 00:00:00 2001
From: David Edmundson <kde@davidedmundson.co.uk>
Date: Fri, 17 Jun 2022 19:08:41 +0100
Subject: [PATCH] Avoid crash in plasma-session teardown
Whilst iterating through m_proccesses we make them finish. An existing
connect removes them from the vector.
Iterating through a volatile vector is unsafe.
BUG: 454159
(cherry picked from commit 3692ff7ca4a927960883f737cf9f8e842bb2ee4a)
---
startkde/plasma-session/sessiontrack.cpp | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/startkde/plasma-session/sessiontrack.cpp b/startkde/plasma-session/sessiontrack.cpp
index 850422066..5df86ee84 100644
--- a/startkde/plasma-session/sessiontrack.cpp
+++ b/startkde/plasma-session/sessiontrack.cpp
@@ -37,7 +37,10 @@ SessionTrack::~SessionTrack()
for (auto process : std::as_const(m_processes)) {
process->terminate();
}
- for (auto process : std::as_const(m_processes)) {
+
+ // copy before the loop as we remove finished processes from the vector
+ const QVector<QProcess *> processesCopy = m_processes;
+ for (auto process : processesCopy) {
if (process->state() == QProcess::Running && !process->waitForFinished(500)) {
process->kill();
} else {
--
2.36.1