forked from qt-creator/qt-creator
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:
committed by
Tobias Hunger
parent
f27b738f65
commit
5b21ee5925
@@ -123,6 +123,11 @@ QbsProject::QbsProject(QbsManager *manager, const QString &fileName) :
|
|||||||
QbsProject::~QbsProject()
|
QbsProject::~QbsProject()
|
||||||
{
|
{
|
||||||
m_codeModelFuture.cancel();
|
m_codeModelFuture.cancel();
|
||||||
|
if (m_qbsSetupProjectJob) {
|
||||||
|
m_qbsSetupProjectJob->disconnect(this);
|
||||||
|
m_qbsSetupProjectJob->cancel();
|
||||||
|
delete m_qbsSetupProjectJob;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QString QbsProject::displayName() const
|
QString QbsProject::displayName() const
|
||||||
@@ -452,8 +457,12 @@ void QbsProject::prepareForParsing()
|
|||||||
delete m_qbsUpdateFutureInterface;
|
delete m_qbsUpdateFutureInterface;
|
||||||
m_qbsUpdateFutureInterface = 0;
|
m_qbsUpdateFutureInterface = 0;
|
||||||
|
|
||||||
delete m_qbsSetupProjectJob;
|
if (m_qbsSetupProjectJob) {
|
||||||
m_qbsSetupProjectJob = 0;
|
m_qbsSetupProjectJob->disconnect(this);
|
||||||
|
m_qbsSetupProjectJob->cancel();
|
||||||
|
m_qbsSetupProjectJob->deleteLater();
|
||||||
|
m_qbsSetupProjectJob = 0;
|
||||||
|
}
|
||||||
|
|
||||||
m_currentProgressBase = 0;
|
m_currentProgressBase = 0;
|
||||||
m_qbsUpdateFutureInterface = new QFutureInterface<void>();
|
m_qbsUpdateFutureInterface = new QFutureInterface<void>();
|
||||||
|
|||||||
Reference in New Issue
Block a user