From 3655b16b4b7886a98b29ead676643a2e59e9ec69 Mon Sep 17 00:00:00 2001 From: Levi Neely Date: Tue, 6 Oct 2026 11:29:26 +0200 Subject: [PATCH] gui: fix QThread crash in Lib9pStreamer::onWorkerFinished QThread::~QThread() aborts if the thread is still running. The previous code called delete unconditionally after a 100ms wait timeout. Now we follow the same pattern as stopWorker(): check if wait() succeeded, and if not, abandon the thread safely via deleteLater. --- kde/gui/lib9pstreamer.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/kde/gui/lib9pstreamer.cpp b/kde/gui/lib9pstreamer.cpp index f9586b6..b8f1b88 100644 --- a/kde/gui/lib9pstreamer.cpp +++ b/kde/gui/lib9pstreamer.cpp @@ -154,9 +154,16 @@ void Lib9pStreamer::onWorkerFinished(bool success, const QString &error) // Clean up the worker if (m_workerThread) { m_workerThread->quit(); - m_workerThread->wait(100); - delete m_worker; - delete m_workerThread; + if (m_workerThread->wait(500)) { + // Thread exited cleanly + delete m_worker; + delete m_workerThread; + } else { + // Thread still running — abandon safely + disconnect(m_worker, nullptr, this, nullptr); + connect(m_workerThread, &QThread::finished, m_worker, &QObject::deleteLater); + connect(m_workerThread, &QThread::finished, m_workerThread, &QObject::deleteLater); + } m_worker = nullptr; m_workerThread = nullptr; }