summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@digia.com>2014-08-26 17:20:42 +0200
committerChristian Kandeler <christian.kandeler@digia.com>2014-09-01 17:06:06 +0200
commita6bba8ca2bd65a444ef71a68c3eeb65a6fd6e7ce (patch)
treef66d8adff4a3e8f2dc472e00848ad1508bca0353
parentb382690dbd5a506339410b0494ef9f9be5d5b954 (diff)
downloadqt-creator-a6bba8ca2bd65a444ef71a68c3eeb65a6fd6e7ce.tar.gz
QbsProjectManager: Fix crash when an install step is removed.
The object has already been deleted when the stepRemoved() signal comes in, so we call disconnect() on a dangling pointer. Change-Id: Ife5192f9edbde3d42c96dbcae60d7eb03b051745 Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
-rw-r--r--src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp13
-rw-r--r--src/plugins/qbsprojectmanager/qbsrunconfiguration.h1
2 files changed, 14 insertions, 0 deletions
diff --git a/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp b/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp
index 1e115e71eb..84086a97dc 100644
--- a/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp
+++ b/src/plugins/qbsprojectmanager/qbsrunconfiguration.cpp
@@ -192,6 +192,8 @@ void QbsRunConfiguration::installStepChanged()
if (m_currentBuildStepList) {
connect(m_currentBuildStepList, SIGNAL(stepInserted(int)), this, SLOT(installStepChanged()));
+ connect(m_currentBuildStepList, SIGNAL(aboutToRemoveStep(int)), this,
+ SLOT(installStepToBeRemoved(int)));
connect(m_currentBuildStepList, SIGNAL(stepRemoved(int)), this, SLOT(installStepChanged()));
connect(m_currentBuildStepList, SIGNAL(stepMoved(int,int)), this, SLOT(installStepChanged()));
}
@@ -199,6 +201,17 @@ void QbsRunConfiguration::installStepChanged()
emit targetInformationChanged();
}
+void QbsRunConfiguration::installStepToBeRemoved(int pos)
+{
+ QTC_ASSERT(m_currentBuildStepList, return);
+ // TODO: Our logic is rather broken. Users can create as many qbs install steps as they want,
+ // but we ignore all but the first one.
+ if (m_currentBuildStepList->steps().at(pos) != m_currentInstallStep)
+ return;
+ disconnect(m_currentInstallStep, SIGNAL(changed()), this, SIGNAL(targetInformationChanged()));
+ m_currentInstallStep = 0;
+}
+
QString QbsRunConfiguration::executable() const
{
QbsProject *pro = static_cast<QbsProject *>(target()->project());
diff --git a/src/plugins/qbsprojectmanager/qbsrunconfiguration.h b/src/plugins/qbsprojectmanager/qbsrunconfiguration.h
index 590319d992..48af566bcf 100644
--- a/src/plugins/qbsprojectmanager/qbsrunconfiguration.h
+++ b/src/plugins/qbsprojectmanager/qbsrunconfiguration.h
@@ -105,6 +105,7 @@ protected:
private slots:
void installStepChanged();
+ void installStepToBeRemoved(int pos);
private:
void setBaseWorkingDirectory(const QString &workingDirectory);