summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp8
-rw-r--r--src/plugins/qbsprojectmanager/qbsbuildstep.cpp9
-rw-r--r--src/plugins/qbsprojectmanager/qbsbuildstep.h2
-rw-r--r--src/plugins/qbsprojectmanager/qbscleanstep.cpp9
-rw-r--r--src/plugins/qbsprojectmanager/qbscleanstep.h2
5 files changed, 30 insertions, 0 deletions
diff --git a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp
index f2aac00591..b2d0811d8d 100644
--- a/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp
+++ b/src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp
@@ -159,6 +159,14 @@ QbsBuildConfiguration::QbsBuildConfiguration(Target *target, Core::Id id)
QbsBuildConfiguration::~QbsBuildConfiguration()
{
+ for (BuildStep * const bs : buildSteps()->steps()) {
+ if (const auto qbs = qobject_cast<QbsBuildStep *>(bs))
+ qbs->dropSession();
+ }
+ for (BuildStep * const cs : cleanSteps()->steps()) {
+ if (const auto qcs = qobject_cast<QbsCleanStep *>(cs))
+ qcs->dropSession();
+ }
delete m_buildSystem;
}
diff --git a/src/plugins/qbsprojectmanager/qbsbuildstep.cpp b/src/plugins/qbsprojectmanager/qbsbuildstep.cpp
index 9827cf672f..239276de77 100644
--- a/src/plugins/qbsprojectmanager/qbsbuildstep.cpp
+++ b/src/plugins/qbsprojectmanager/qbsbuildstep.cpp
@@ -539,6 +539,15 @@ QbsBuildStepData QbsBuildStep::stepData() const
return data;
}
+void QbsBuildStep::dropSession()
+{
+ if (m_session) {
+ doCancel();
+ m_session->disconnect(this);
+ m_session = nullptr;
+ }
+}
+
// --------------------------------------------------------------------
// QbsBuildStepConfigWidget:
diff --git a/src/plugins/qbsprojectmanager/qbsbuildstep.h b/src/plugins/qbsprojectmanager/qbsbuildstep.h
index 3c5249dfb0..d6766768c4 100644
--- a/src/plugins/qbsprojectmanager/qbsbuildstep.h
+++ b/src/plugins/qbsprojectmanager/qbsbuildstep.h
@@ -72,6 +72,8 @@ public:
QbsBuildSystem *qbsBuildSystem() const;
QbsBuildStepData stepData() const;
+ void dropSession();
+
signals:
void qbsConfigurationChanged();
void qbsBuildOptionsChanged();
diff --git a/src/plugins/qbsprojectmanager/qbscleanstep.cpp b/src/plugins/qbsprojectmanager/qbscleanstep.cpp
index f6753fa411..07adf568d2 100644
--- a/src/plugins/qbsprojectmanager/qbscleanstep.cpp
+++ b/src/plugins/qbsprojectmanager/qbscleanstep.cpp
@@ -85,6 +85,15 @@ QbsCleanStep::~QbsCleanStep()
m_session->disconnect(this);
}
+void QbsCleanStep::dropSession()
+{
+ if (m_session) {
+ doCancel();
+ m_session->disconnect(this);
+ m_session = nullptr;
+ }
+}
+
bool QbsCleanStep::init()
{
if (buildSystem()->isParsing() || m_session)
diff --git a/src/plugins/qbsprojectmanager/qbscleanstep.h b/src/plugins/qbsprojectmanager/qbscleanstep.h
index 7af3d61fc7..f757afe9e0 100644
--- a/src/plugins/qbsprojectmanager/qbscleanstep.h
+++ b/src/plugins/qbsprojectmanager/qbscleanstep.h
@@ -46,6 +46,8 @@ public:
QbsBuildStepData stepData() const;
+ void dropSession();
+
private:
bool init() override;
void doRun() override;