QbsProjectManager: Fix potential crashes when resolving a project.

First case: Re-parsing is requested while a project is being resolved.
The respective function can be entered more than once due to signal
callbacks, resulting in double deletion of the job object.
Second case: Closing Creator while a project is being resolved lets the
resolve job run unattended, resulting in a crash on exit.

Change-Id: I99e034a211ebe730dd02096ce76d601fbc848f5c
Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
This commit is contained in:
Christian Kandeler
2013-09-03 15:43:25 +02:00
committed by Tobias Hunger
parent f27b738f65
commit 5b21ee5925

View File

@@ -123,6 +123,11 @@ QbsProject::QbsProject(QbsManager *manager, const QString &fileName) :
QbsProject::~QbsProject()
{
m_codeModelFuture.cancel();
if (m_qbsSetupProjectJob) {
m_qbsSetupProjectJob->disconnect(this);
m_qbsSetupProjectJob->cancel();
delete m_qbsSetupProjectJob;
}
}
QString QbsProject::displayName() const
@@ -452,8 +457,12 @@ void QbsProject::prepareForParsing()
delete m_qbsUpdateFutureInterface;
m_qbsUpdateFutureInterface = 0;
delete m_qbsSetupProjectJob;
m_qbsSetupProjectJob = 0;
if (m_qbsSetupProjectJob) {
m_qbsSetupProjectJob->disconnect(this);
m_qbsSetupProjectJob->cancel();
m_qbsSetupProjectJob->deleteLater();
m_qbsSetupProjectJob = 0;
}
m_currentProgressBase = 0;
m_qbsUpdateFutureInterface = new QFutureInterface<void>();