summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@theqtcompany.com>2016-05-30 12:31:13 +0200
committerChristian Kandeler <christian.kandeler@theqtcompany.com>2016-05-30 12:53:24 +0000
commit299d93e77be421f1fa6fbb3f06701113013b4e11 (patch)
tree968c71452ff7d3d5cafa7f32f14b88b34d16c939
parent0e331a2e2946385d2a86fcf2d13027a8e4003484 (diff)
downloadqt-creator-299d93e77be421f1fa6fbb3f06701113013b4e11.tar.gz
QbsProjectManager: Fix crash on project unloading.
We can't just blindly delete the qbs jobs after cancelling them, as that is not a synchronous operation. Task-number: QTCREATORBUG-16273 Change-Id: I29787da857e70404a1be1b4bc54921f5a8ce448b Reviewed-by: Orgad Shaneh <orgads@gmail.com>
-rw-r--r--src/plugins/qbsprojectmanager/qbsprojectparser.cpp24
1 files changed, 12 insertions, 12 deletions
diff --git a/src/plugins/qbsprojectmanager/qbsprojectparser.cpp b/src/plugins/qbsprojectmanager/qbsprojectparser.cpp
index 22fc1112d9..d477062341 100644
--- a/src/plugins/qbsprojectmanager/qbsprojectparser.cpp
+++ b/src/plugins/qbsprojectmanager/qbsprojectparser.cpp
@@ -59,18 +59,18 @@ QbsProjectParser::QbsProjectParser(QbsProject *project, QFutureInterface<bool> *
QbsProjectParser::~QbsProjectParser()
{
- if (m_qbsSetupProjectJob) {
- m_qbsSetupProjectJob->disconnect(this);
- m_qbsSetupProjectJob->cancel();
- m_qbsSetupProjectJob->deleteLater();
- m_qbsSetupProjectJob = 0;
- }
- if (m_ruleExecutionJob) {
- m_ruleExecutionJob->disconnect(this);
- m_ruleExecutionJob->cancel();
- m_ruleExecutionJob->deleteLater();
- m_ruleExecutionJob = 0;
- }
+ const auto deleteJob = [this](qbs::AbstractJob *job) {
+ if (!job)
+ return;
+ if (job->state() == qbs::AbstractJob::StateFinished) {
+ job->deleteLater();
+ return;
+ }
+ connect(job, &qbs::AbstractJob::finished, job, &qbs::AbstractJob::deleteLater);
+ job->cancel();
+ };
+ deleteJob(m_qbsSetupProjectJob);
+ deleteJob(m_ruleExecutionJob);
m_fi = 0; // we do not own m_fi, do not delete
}