From d159d05baab01b01c3524304b11265ebeb665ad1 Mon Sep 17 00:00:00 2001 From: David Edmundson 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 processesCopy = m_processes; + for (auto process : processesCopy) { if (process->state() == QProcess::Running && !process->waitForFinished(500)) { process->kill(); } else {