forked from qt-creator/qt-creator
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>
This commit is contained in:
@@ -59,18 +59,18 @@ QbsProjectParser::QbsProjectParser(QbsProject *project, QFutureInterface<bool> *
|
|||||||
|
|
||||||
QbsProjectParser::~QbsProjectParser()
|
QbsProjectParser::~QbsProjectParser()
|
||||||
{
|
{
|
||||||
if (m_qbsSetupProjectJob) {
|
const auto deleteJob = [this](qbs::AbstractJob *job) {
|
||||||
m_qbsSetupProjectJob->disconnect(this);
|
if (!job)
|
||||||
m_qbsSetupProjectJob->cancel();
|
return;
|
||||||
m_qbsSetupProjectJob->deleteLater();
|
if (job->state() == qbs::AbstractJob::StateFinished) {
|
||||||
m_qbsSetupProjectJob = 0;
|
job->deleteLater();
|
||||||
}
|
return;
|
||||||
if (m_ruleExecutionJob) {
|
|
||||||
m_ruleExecutionJob->disconnect(this);
|
|
||||||
m_ruleExecutionJob->cancel();
|
|
||||||
m_ruleExecutionJob->deleteLater();
|
|
||||||
m_ruleExecutionJob = 0;
|
|
||||||
}
|
}
|
||||||
|
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
|
m_fi = 0; // we do not own m_fi, do not delete
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user