QtSupport: Don't rely on QObject parents on late destruction

Change-Id: Ibdb91c80d4932a5f0dced9843dfd01641577a88d
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
hjk
2023-09-01 07:55:01 +02:00
parent 53718bcf1d
commit 3d028125df
4 changed files with 18 additions and 1 deletions

View File

@@ -135,6 +135,12 @@ void QtSupportPlugin::initialize()
QtVersionManager::initialized(); QtVersionManager::initialized();
} }
ExtensionSystem::IPlugin::ShutdownFlag QtSupportPlugin::aboutToShutdown()
{
QtVersionManager::shutdown();
return SynchronousShutdown;
}
const char kLinkWithQtInstallationSetting[] = "LinkWithQtInstallation"; const char kLinkWithQtInstallationSetting[] = "LinkWithQtInstallation";
static void askAboutQtInstallation() static void askAboutQtInstallation()

View File

@@ -19,6 +19,7 @@ public:
private: private:
void initialize() final; void initialize() final;
void extensionsInitialized() final; void extensionsInitialized() final;
ShutdownFlag aboutToShutdown() final;
class QtSupportPluginPrivate *d = nullptr; class QtSupportPluginPrivate *d = nullptr;

View File

@@ -92,9 +92,12 @@ public:
this, &QtVersionManagerImpl::triggerQtVersionRestore); this, &QtVersionManagerImpl::triggerQtVersionRestore);
} }
~QtVersionManagerImpl() void shutdown()
{ {
delete m_writer; delete m_writer;
m_writer = nullptr;
delete m_configFileWatcher;
m_configFileWatcher = nullptr;
qDeleteAll(m_versions); qDeleteAll(m_versions);
m_versions.clear(); m_versions.clear();
} }
@@ -174,6 +177,11 @@ void QtVersionManager::initialized()
qtVersionManagerImpl(); qtVersionManagerImpl();
} }
void QtVersionManager::shutdown()
{
qtVersionManagerImpl().shutdown();
}
bool QtVersionManagerImpl::restoreQtVersions() bool QtVersionManagerImpl::restoreQtVersions()
{ {
QTC_ASSERT(!m_writer, return false); QTC_ASSERT(!m_writer, return false);

View File

@@ -45,6 +45,8 @@ public:
const QString &manifestPath, const QString &manifestPath,
const QString &examplesPath); const QString &examplesPath);
static void shutdown();
signals: signals:
// content of QtVersion objects with qmake path might have changed // content of QtVersion objects with qmake path might have changed
void qtVersionsChanged(const QList<int> &addedIds, const QList<int> &removedIds, const QList<int> &changedIds); void qtVersionsChanged(const QList<int> &addedIds, const QList<int> &removedIds, const QList<int> &changedIds);