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()
|
||||
{
|
||||
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>();
|
||||
|
||||
Reference in New Issue
Block a user