aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/qtsupport
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2024-02-26 10:28:28 +0100
committerhjk <hjk@qt.io>2024-02-26 11:57:23 +0000
commitb5e03b8fe2ce7bfe3ef782591bf19a6e452ef32d (patch)
tree09c099b4587b4d8ceda868c2f31649a778178f4a /src/plugins/qtsupport
parentb10df4c1b3cdb0d2d9c36a0655af95085abe615e (diff)
QtSupport: Reduce ExtraCompiler life time to plugin life time again
Amends 6467797af2. The created extra compilers were parented to their factories, who gained a life time extension from 'end of plugin live' to static destruction when the factories were made static. However, this that time the likewise static QObjectCache in GeneratedCodeModelSupport::update might be destroyed already, leading to a potential crash in m_cache.remove(dead). This change here re-establishes the original timing by using the plugin itself as parent for the extra compilers. Change-Id: Id868b7b87f00440c67af551b71359c47a5c29cba Reviewed-by: Christian Kandeler <christian.kandeler@qt.io> Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Diffstat (limited to 'src/plugins/qtsupport')
-rw-r--r--src/plugins/qtsupport/qscxmlcgenerator.cpp11
-rw-r--r--src/plugins/qtsupport/qscxmlcgenerator.h4
-rw-r--r--src/plugins/qtsupport/qtsupportplugin.cpp4
-rw-r--r--src/plugins/qtsupport/uicgenerator.cpp11
-rw-r--r--src/plugins/qtsupport/uicgenerator.h4
5 files changed, 22 insertions, 12 deletions
diff --git a/src/plugins/qtsupport/qscxmlcgenerator.cpp b/src/plugins/qtsupport/qscxmlcgenerator.cpp
index 8aa1c0198f..3bfd201a04 100644
--- a/src/plugins/qtsupport/qscxmlcgenerator.cpp
+++ b/src/plugins/qtsupport/qscxmlcgenerator.cpp
@@ -129,8 +129,9 @@ FileNameToContentsHash QScxmlcGenerator::handleProcessFinished(Process *process)
class QScxmlcGeneratorFactory final : public ExtraCompilerFactory
{
public:
- QScxmlcGeneratorFactory() = default;
+ explicit QScxmlcGeneratorFactory(QObject *guard) : m_guard(guard) {}
+private:
FileType sourceType() const final { return FileType::StateChart; }
QString sourceTag() const final { return QStringLiteral("scxml"); }
@@ -139,13 +140,15 @@ public:
const FilePath &source,
const FilePaths &targets) final
{
- return new QScxmlcGenerator(project, source, targets, this);
+ return new QScxmlcGenerator(project, source, targets, m_guard);
}
+
+ QObject *m_guard;
};
-void setupQScxmlcGenerator()
+void setupQScxmlcGenerator(QObject *guard)
{
- static QScxmlcGeneratorFactory theQScxmlcGeneratorFactory;
+ static QScxmlcGeneratorFactory theQScxmlcGeneratorFactory(guard);
}
} // QtSupport::Internal
diff --git a/src/plugins/qtsupport/qscxmlcgenerator.h b/src/plugins/qtsupport/qscxmlcgenerator.h
index 811f485689..c7c8cf8265 100644
--- a/src/plugins/qtsupport/qscxmlcgenerator.h
+++ b/src/plugins/qtsupport/qscxmlcgenerator.h
@@ -3,8 +3,10 @@
#pragma once
+#include <QObject>
+
namespace QtSupport::Internal {
-void setupQScxmlcGenerator();
+void setupQScxmlcGenerator(QObject *guard);
} // QtSupport::Internal
diff --git a/src/plugins/qtsupport/qtsupportplugin.cpp b/src/plugins/qtsupport/qtsupportplugin.cpp
index 6a34e466d1..db0f8888af 100644
--- a/src/plugins/qtsupport/qtsupportplugin.cpp
+++ b/src/plugins/qtsupport/qtsupportplugin.cpp
@@ -88,8 +88,8 @@ void QtSupportPlugin::initialize()
setupGettingStartedWelcomePage();
setupQtSettingsPage();
setupQtOutputFormatter();
- setupUicGenerator();
- setupQScxmlcGenerator();
+ setupUicGenerator(this);
+ setupQScxmlcGenerator(this);
setupExternalDesigner(this);
setupExternalLinguist();
diff --git a/src/plugins/qtsupport/uicgenerator.cpp b/src/plugins/qtsupport/uicgenerator.cpp
index dee12b9f9c..74b8355af9 100644
--- a/src/plugins/qtsupport/uicgenerator.cpp
+++ b/src/plugins/qtsupport/uicgenerator.cpp
@@ -72,8 +72,9 @@ FileNameToContentsHash UicGenerator::handleProcessFinished(Process *process)
class UicGeneratorFactory final : public ExtraCompilerFactory
{
public:
- UicGeneratorFactory() = default;
+ explicit UicGeneratorFactory(QObject *guard) : m_guard(guard) {}
+private:
FileType sourceType() const final { return FileType::Form; }
QString sourceTag() const final { return QLatin1String("ui"); }
@@ -82,13 +83,15 @@ public:
const FilePath &source,
const FilePaths &targets) final
{
- return new UicGenerator(project, source, targets, this);
+ return new UicGenerator(project, source, targets, m_guard);
}
+
+ QObject *m_guard;
};
-void setupUicGenerator()
+void setupUicGenerator(QObject *guard)
{
- static UicGeneratorFactory theUicGeneratorFactory;
+ static UicGeneratorFactory theUicGeneratorFactory(guard);
}
} // QtSupport::Internal
diff --git a/src/plugins/qtsupport/uicgenerator.h b/src/plugins/qtsupport/uicgenerator.h
index f8fdeb5ca0..3f3d4c20b5 100644
--- a/src/plugins/qtsupport/uicgenerator.h
+++ b/src/plugins/qtsupport/uicgenerator.h
@@ -3,8 +3,10 @@
#pragma once
+#include <QObject>
+
namespace QtSupport::Internal {
-void setupUicGenerator();
+void setupUicGenerator(QObject *guard);
} // QtSupport::Internal