aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarcus Tillmanns <[email protected]>2025-10-13 11:12:52 +0200
committerMarcus Tillmanns <[email protected]>2025-10-13 10:06:05 +0000
commitd3b1008e864e011b386e1d96869de8fcc33e7251 (patch)
tree8254a2f92e10ee119def6b72bbaf9df5c6931378
parent9d8362f481e5f541b81257dbbb4d34d8a1d227e0 (diff)
QMake: Fix crash during destruction
During destruction of QmakeBuildConfiguration the connection from BuildSystem::parsingFinished to QmakeBuildConfiguration::updateProblemLabel might still be triggered. But due to the QmakeBuildConfiguration being already partially destructed this leads to a crash. From Sentry Issue: https://the-qt-company-00.sentry.io/share/issue/710530f3be614a5ab0f1b35f04a21220/ Change-Id: I545ff38b990e642696dbce997a4ca77c6842b99c Reviewed-by: Christian Kandeler <[email protected]>
-rw-r--r--src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp9
-rw-r--r--src/plugins/qmakeprojectmanager/qmakebuildconfiguration.h3
-rw-r--r--src/plugins/qmakeprojectmanager/qmakestep.cpp1
3 files changed, 12 insertions, 1 deletions
diff --git a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp
index c5731d6c2f3..4b3e7054042 100644
--- a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp
+++ b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp
@@ -150,7 +150,7 @@ QmakeBuildConfiguration::QmakeBuildConfiguration(Target *target, Id id)
this, &QmakeBuildConfiguration::updateProblemLabel);
connect(&settings(), &AspectContainer::changed,
this, &QmakeBuildConfiguration::updateProblemLabel);
- connect(buildSystem(), &BuildSystem::parsingFinished,
+ m_bsParsingFinishedConnection = connect(buildSystem(), &BuildSystem::parsingFinished,
this, &QmakeBuildConfiguration::updateProblemLabel);
connect(this, &BuildConfiguration::kitChanged,
this, &QmakeBuildConfiguration::updateProblemLabel);
@@ -182,6 +182,13 @@ QmakeBuildConfiguration::QmakeBuildConfiguration(Target *target, Id id)
runSystemFunctions.setDefaultValue(2);
}
+QmakeBuildConfiguration::~QmakeBuildConfiguration()
+{
+ // BuildSystem might send signals during destruction before this QObject
+ // had a chance to disconnect from it.
+ disconnect(m_bsParsingFinishedConnection);
+}
+
void QmakeBuildConfiguration::toMap(Store &map) const
{
BuildConfiguration::toMap(map);
diff --git a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.h b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.h
index 4c6b2b40ab4..bc1ac3b5b43 100644
--- a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.h
+++ b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.h
@@ -29,6 +29,7 @@ class QMAKEPROJECTMANAGER_EXPORT QmakeBuildConfiguration : public ProjectExplore
public:
QmakeBuildConfiguration(ProjectExplorer::Target *target, Utils::Id id);
+ ~QmakeBuildConfiguration();
void setSubNodeBuild(QmakeProFileNode *node);
QmakeProFileNode *subNodeBuild() const;
@@ -136,6 +137,8 @@ private:
QtSupport::QtVersion::QmakeBuildConfigs m_qmakeBuildConfiguration;
QmakeProFileNode *m_subNodeBuild = nullptr;
ProjectExplorer::FileNode *m_fileNodeBuild = nullptr;
+
+ QMetaObject::Connection m_bsParsingFinishedConnection;
};
class QMAKEPROJECTMANAGER_EXPORT QmakeBuildConfigurationFactory : public ProjectExplorer::BuildConfigurationFactory
diff --git a/src/plugins/qmakeprojectmanager/qmakestep.cpp b/src/plugins/qmakeprojectmanager/qmakestep.cpp
index a01bc5d4a18..d406d74dedd 100644
--- a/src/plugins/qmakeprojectmanager/qmakestep.cpp
+++ b/src/plugins/qmakeprojectmanager/qmakestep.cpp
@@ -112,6 +112,7 @@ QString QMakeStep::allArguments(const QtVersion *v, ArgumentFlags flags) const
{
QTC_ASSERT(v, return QString());
QmakeBuildConfiguration *bc = qmakeBuildConfiguration();
+ QTC_ASSERT(bc, return {});
QStringList arguments;
if (bc->subNodeBuild())
arguments << bc->subNodeBuild()->filePath().nativePath();