From 3d028125df796ccb4b172933f6e9f930990a2659 Mon Sep 17 00:00:00 2001 From: hjk Date: Fri, 1 Sep 2023 07:55:01 +0200 Subject: [PATCH] QtSupport: Don't rely on QObject parents on late destruction Change-Id: Ibdb91c80d4932a5f0dced9843dfd01641577a88d Reviewed-by: Eike Ziller --- src/plugins/qtsupport/qtsupportplugin.cpp | 6 ++++++ src/plugins/qtsupport/qtsupportplugin.h | 1 + src/plugins/qtsupport/qtversionmanager.cpp | 10 +++++++++- src/plugins/qtsupport/qtversionmanager.h | 2 ++ 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/plugins/qtsupport/qtsupportplugin.cpp b/src/plugins/qtsupport/qtsupportplugin.cpp index 235fccf7a1a..090b71c7512 100644 --- a/src/plugins/qtsupport/qtsupportplugin.cpp +++ b/src/plugins/qtsupport/qtsupportplugin.cpp @@ -135,6 +135,12 @@ void QtSupportPlugin::initialize() QtVersionManager::initialized(); } +ExtensionSystem::IPlugin::ShutdownFlag QtSupportPlugin::aboutToShutdown() +{ + QtVersionManager::shutdown(); + return SynchronousShutdown; +} + const char kLinkWithQtInstallationSetting[] = "LinkWithQtInstallation"; static void askAboutQtInstallation() diff --git a/src/plugins/qtsupport/qtsupportplugin.h b/src/plugins/qtsupport/qtsupportplugin.h index 7e4c98a9aa0..abd4c7fed37 100644 --- a/src/plugins/qtsupport/qtsupportplugin.h +++ b/src/plugins/qtsupport/qtsupportplugin.h @@ -19,6 +19,7 @@ public: private: void initialize() final; void extensionsInitialized() final; + ShutdownFlag aboutToShutdown() final; class QtSupportPluginPrivate *d = nullptr; diff --git a/src/plugins/qtsupport/qtversionmanager.cpp b/src/plugins/qtsupport/qtversionmanager.cpp index b13e63703f8..7fca7df3655 100644 --- a/src/plugins/qtsupport/qtversionmanager.cpp +++ b/src/plugins/qtsupport/qtversionmanager.cpp @@ -92,9 +92,12 @@ public: this, &QtVersionManagerImpl::triggerQtVersionRestore); } - ~QtVersionManagerImpl() + void shutdown() { delete m_writer; + m_writer = nullptr; + delete m_configFileWatcher; + m_configFileWatcher = nullptr; qDeleteAll(m_versions); m_versions.clear(); } @@ -174,6 +177,11 @@ void QtVersionManager::initialized() qtVersionManagerImpl(); } +void QtVersionManager::shutdown() +{ + qtVersionManagerImpl().shutdown(); +} + bool QtVersionManagerImpl::restoreQtVersions() { QTC_ASSERT(!m_writer, return false); diff --git a/src/plugins/qtsupport/qtversionmanager.h b/src/plugins/qtsupport/qtversionmanager.h index 97f8e6d537f..23d73a44155 100644 --- a/src/plugins/qtsupport/qtversionmanager.h +++ b/src/plugins/qtsupport/qtversionmanager.h @@ -45,6 +45,8 @@ public: const QString &manifestPath, const QString &examplesPath); + static void shutdown(); + signals: // content of QtVersion objects with qmake path might have changed void qtVersionsChanged(const QList &addedIds, const QList &removedIds, const QList &changedIds);