forked from qt-creator/qt-creator
QbsProjectManager: Fix crash when unloading a building project
Note that unloading a building project is generally broken in that the build manager waits indefinitely for the build step's finished() signal, but that's a general problem which needs to get addressed in a different patch. This one fixes a qbs-specific crash. Fixes: QTCREATORBUG-23851 Change-Id: I93e254acd1c73fe7495d01fcad04ea9301130dd0 Reviewed-by: Ivan Komissarov <ABBAPOH@gmail.com> Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
@@ -159,6 +159,14 @@ QbsBuildConfiguration::QbsBuildConfiguration(Target *target, Core::Id id)
|
|||||||
|
|
||||||
QbsBuildConfiguration::~QbsBuildConfiguration()
|
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;
|
delete m_buildSystem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -539,6 +539,15 @@ QbsBuildStepData QbsBuildStep::stepData() const
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QbsBuildStep::dropSession()
|
||||||
|
{
|
||||||
|
if (m_session) {
|
||||||
|
doCancel();
|
||||||
|
m_session->disconnect(this);
|
||||||
|
m_session = nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// --------------------------------------------------------------------
|
// --------------------------------------------------------------------
|
||||||
// QbsBuildStepConfigWidget:
|
// QbsBuildStepConfigWidget:
|
||||||
|
|||||||
@@ -72,6 +72,8 @@ public:
|
|||||||
QbsBuildSystem *qbsBuildSystem() const;
|
QbsBuildSystem *qbsBuildSystem() const;
|
||||||
QbsBuildStepData stepData() const;
|
QbsBuildStepData stepData() const;
|
||||||
|
|
||||||
|
void dropSession();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void qbsConfigurationChanged();
|
void qbsConfigurationChanged();
|
||||||
void qbsBuildOptionsChanged();
|
void qbsBuildOptionsChanged();
|
||||||
|
|||||||
@@ -85,6 +85,15 @@ QbsCleanStep::~QbsCleanStep()
|
|||||||
m_session->disconnect(this);
|
m_session->disconnect(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QbsCleanStep::dropSession()
|
||||||
|
{
|
||||||
|
if (m_session) {
|
||||||
|
doCancel();
|
||||||
|
m_session->disconnect(this);
|
||||||
|
m_session = nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool QbsCleanStep::init()
|
bool QbsCleanStep::init()
|
||||||
{
|
{
|
||||||
if (buildSystem()->isParsing() || m_session)
|
if (buildSystem()->isParsing() || m_session)
|
||||||
|
|||||||
@@ -46,6 +46,8 @@ public:
|
|||||||
|
|
||||||
QbsBuildStepData stepData() const;
|
QbsBuildStepData stepData() const;
|
||||||
|
|
||||||
|
void dropSession();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool init() override;
|
bool init() override;
|
||||||
void doRun() override;
|
void doRun() override;
|
||||||
|
|||||||
Reference in New Issue
Block a user