From e81cfa6e70e96ad23063dd77327fe9d34f23162d Mon Sep 17 00:00:00 2001
From: Tobias Hunger <tobias.hunger@digia.com>
Date: Wed, 26 Sep 2012 17:06:53 +0200
Subject: [PATCH] Make sure to never write kits/Qt/TCs before they were read

We should be save already, but let's be paranoid...

Change-Id: I925fb94f4cebe4c54e3419e18d307a999055ebbf
Reviewed-by: Daniel Teske <daniel.teske@digia.com>
---
 src/plugins/projectexplorer/kitmanager.cpp       |  8 ++++++--
 src/plugins/projectexplorer/toolchainmanager.cpp | 13 +++++++------
 src/plugins/qtsupport/qtversionmanager.cpp       |  7 +++++--
 3 files changed, 18 insertions(+), 10 deletions(-)

diff --git a/src/plugins/projectexplorer/kitmanager.cpp b/src/plugins/projectexplorer/kitmanager.cpp
index d1aa4b0880a..e90cd6dfe86 100644
--- a/src/plugins/projectexplorer/kitmanager.cpp
+++ b/src/plugins/projectexplorer/kitmanager.cpp
@@ -42,6 +42,7 @@
 
 #include <utils/persistentsettings.h>
 #include <utils/environment.h>
+#include <utils/qtcassert.h>
 
 #include <QCoreApplication>
 #include <QDir>
@@ -91,7 +92,7 @@ public:
 
 KitManagerPrivate::KitManagerPrivate()
     : m_defaultKit(0), m_initialized(false),
-      m_writer(new Utils::PersistentSettingsWriter(settingsFileName(), QLatin1String("QtCreatorProfiles")))
+      m_writer(0)
 { }
 
 KitManagerPrivate::~KitManagerPrivate()
@@ -148,6 +149,7 @@ KitManager::KitManager(QObject *parent) :
 
 void KitManager::restoreKits()
 {
+    QTC_ASSERT(!d->m_writer, return);
     QList<Kit *> kitsToRegister;
     QList<Kit *> kitsToCheck;
 
@@ -213,6 +215,8 @@ void KitManager::restoreKits()
     Kit *k = find(userKits.defaultKit);
     if (k)
         setDefaultKit(k);
+
+    d->m_writer = new Utils::PersistentSettingsWriter(settingsFileName(), QLatin1String("QtCreatorProfiles"));
 }
 
 KitManager::~KitManager()
@@ -224,7 +228,7 @@ KitManager::~KitManager()
 
 void KitManager::saveKits()
 {
-    if (!d->m_initialized) // ignore save requests while we are not initialized.
+    if (!d->m_writer) // ignore save requests while we are not initialized.
         return;
 
     QVariantMap data;
diff --git a/src/plugins/projectexplorer/toolchainmanager.cpp b/src/plugins/projectexplorer/toolchainmanager.cpp
index 5a9eb58870f..158c7401acb 100644
--- a/src/plugins/projectexplorer/toolchainmanager.cpp
+++ b/src/plugins/projectexplorer/toolchainmanager.cpp
@@ -39,6 +39,7 @@
 #include <extensionsystem/pluginmanager.h>
 
 #include <utils/persistentsettings.h>
+#include <utils/qtcassert.h>
 
 #include <QCoreApplication>
 #include <QDir>
@@ -81,7 +82,6 @@ public:
     QList<ToolChain *> &toolChains();
 
     ToolChainManager *q;
-    bool m_initialized;
     QMap<QString, Utils::FileName> m_abiToDebugger;
     Utils::PersistentSettingsWriter *m_writer;
 
@@ -90,8 +90,7 @@ private:
 };
 
 ToolChainManagerPrivate::ToolChainManagerPrivate(ToolChainManager *parent)
-    : q(parent), m_initialized(false),
-      m_writer(new Utils::PersistentSettingsWriter(settingsFileName(QLatin1String(TOOLCHAIN_FILENAME)), QLatin1String("QtCreatorToolChains")))
+    : q(parent), m_writer(0)
 { }
 
 ToolChainManagerPrivate::~ToolChainManagerPrivate()
@@ -99,10 +98,8 @@ ToolChainManagerPrivate::~ToolChainManagerPrivate()
 
 QList<ToolChain *> &ToolChainManagerPrivate::toolChains()
 {
-    if (!m_initialized) {
-        m_initialized = true;
+    if (!m_writer)
         q->restoreToolChains();
-    }
     return m_toolChains;
 }
 
@@ -136,6 +133,10 @@ ToolChainManager::ToolChainManager(QObject *parent) :
 
 void ToolChainManager::restoreToolChains()
 {
+    QTC_ASSERT(!d->m_writer, return);
+    d->m_writer =
+            new Utils::PersistentSettingsWriter(settingsFileName(QLatin1String(TOOLCHAIN_FILENAME)), QLatin1String("QtCreatorToolChains"));
+
     QList<ToolChain *> tcsToRegister;
     QList<ToolChain *> tcsToCheck;
 
diff --git a/src/plugins/qtsupport/qtversionmanager.cpp b/src/plugins/qtsupport/qtversionmanager.cpp
index 81fa5b99b6e..93cf2eb3a00 100644
--- a/src/plugins/qtsupport/qtversionmanager.cpp
+++ b/src/plugins/qtsupport/qtversionmanager.cpp
@@ -177,6 +177,10 @@ QtVersionManager *QtVersionManager::instance()
 
 bool QtVersionManager::restoreQtVersions()
 {
+    QTC_ASSERT(!m_writer, return false);
+    m_writer = new Utils::PersistentSettingsWriter(settingsFileName(QLatin1String(QTVERSION_FILENAME)),
+                                                   QLatin1String("QtCreatorQtVersions"));
+
     QList<QtVersionFactory *> factories = ExtensionSystem::PluginManager::getObjects<QtVersionFactory>();
 
     Utils::PersistentSettingsReader reader;
@@ -362,8 +366,7 @@ void QtVersionManager::updateFromInstaller(bool emitSignal)
 void QtVersionManager::saveQtVersions()
 {
     if (!m_writer)
-        m_writer = new Utils::PersistentSettingsWriter(settingsFileName(QLatin1String(QTVERSION_FILENAME)),
-                                                       QLatin1String("QtCreatorQtVersions"));
+        return;
 
     QVariantMap data;
     data.insert(QLatin1String(QTVERSION_FILE_VERSION_KEY), 1);
-- 
GitLab