diff options
author | Christian Kandeler <christian.kandeler@digia.com> | 2014-08-26 17:20:42 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@digia.com> | 2014-09-01 17:06:06 +0200 |
commit | a6bba8ca2bd65a444ef71a68c3eeb65a6fd6e7ce (patch) | |
tree | f66d8adff4a3e8f2dc472e00848ad1508bca0353 | |
parent | b382690dbd5a506339410b0494ef9f9be5d5b954 (diff) | |
download | qt-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.cpp | 13 | ||||
-rw-r--r-- | src/plugins/qbsprojectmanager/qbsrunconfiguration.h | 1 |
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); |