From f4d1e57345c6c0a052828c1801281012a58a1cef Mon Sep 17 00:00:00 2001 From: Arttu Tarkiainen Date: Thu, 12 Aug 2021 15:25:25 +0300 Subject: Fix hang when canceling metadatajob by an external call Installer may leave an event loop running in DownloadFileTask::doTask when shutting down, if Downloader::testCanceled() was not yet triggered by connection events, or by a timer timeout used to check if the user has canceled download while the connection is blocked. Fix by waiting for the tasks to finish when canceled. Task-number: QTIFW-2282 Change-Id: I8800cdb3c368da3edaf8def50e3b8e837d3e993c Reviewed-by: Katja Marttila --- src/libs/installer/metadatajob.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/libs/installer/metadatajob.cpp b/src/libs/installer/metadatajob.cpp index 2a9cb5ae7..7a6866dc2 100644 --- a/src/libs/installer/metadatajob.cpp +++ b/src/libs/installer/metadatajob.cpp @@ -545,7 +545,9 @@ void MetadataJob::reset() try { m_xmlTask.cancel(); + m_xmlTask.waitForFinished(); m_metadataTask.cancel(); + m_metadataTask.waitForFinished(); } catch (...) {} m_tempDirDeleter.releaseAndDeleteAll(); m_metadataResult.clear(); -- cgit v1.2.3