diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/qbsprojectmanager/qbsbuildconfiguration.cpp | 8 | ||||
-rw-r--r-- | src/plugins/qbsprojectmanager/qbsbuildstep.cpp | 9 | ||||
-rw-r--r-- | src/plugins/qbsprojectmanager/qbsbuildstep.h | 2 | ||||
-rw-r--r-- | src/plugins/qbsprojectmanager/qbscleanstep.cpp | 9 | ||||
-rw-r--r-- | src/plugins/qbsprojectmanager/qbscleanstep.h | 2 |
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; |