Git: Fix crash when returning to commit editor from diff

The crash happens on Linux/Xming. 2 subsequents calls to
slotRefreshCommitData occur, m_commitDataFetcher is released when the
first one is handled, and the second call dereferences NULL.

Change-Id: Ibc06fe5dd89b790ac84544f6842cbf345d118703
Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
This commit is contained in:
Orgad Shaneh
2014-08-04 15:59:25 +03:00
committed by Orgad Shaneh
parent 4dd200259f
commit ed02e7f3c5
3 changed files with 11 additions and 4 deletions

View File

@@ -229,9 +229,10 @@ void GitSubmitEditor::updateFileModel()
m_firstUpdate = false; m_firstUpdate = false;
return; return;
} }
if (m_workingDirectory.isEmpty()) GitSubmitEditorWidget *w = submitEditorWidget();
if (w->updateInProgress() || m_workingDirectory.isEmpty())
return; return;
submitEditorWidget()->setUpdateInProgress(true); w->setUpdateInProgress(true);
resetCommitDataFetcher(); resetCommitDataFetcher();
m_commitDataFetcher = new CommitDataFetcher(m_commitType, m_workingDirectory); m_commitDataFetcher = new CommitDataFetcher(m_commitType, m_workingDirectory);
connect(m_commitDataFetcher, SIGNAL(finished(bool)), this, SLOT(commitDataRetrieved(bool))); connect(m_commitDataFetcher, SIGNAL(finished(bool)), this, SLOT(commitDataRetrieved(bool)));
@@ -244,10 +245,9 @@ void GitSubmitEditor::updateFileModel()
void GitSubmitEditor::commitDataRetrieved(bool success) void GitSubmitEditor::commitDataRetrieved(bool success)
{ {
GitSubmitEditorWidget *w = submitEditorWidget(); GitSubmitEditorWidget *w = submitEditorWidget();
w->setUpdateInProgress(false);
if (success) { if (success) {
setCommitData(m_commitDataFetcher->commitData()); setCommitData(m_commitDataFetcher->commitData());
submitEditorWidget()->refreshLog(m_workingDirectory); w->refreshLog(m_workingDirectory);
w->setEnabled(true); w->setEnabled(true);
} else { } else {
// Nothing to commit left! // Nothing to commit left!
@@ -257,6 +257,7 @@ void GitSubmitEditor::commitDataRetrieved(bool success)
} }
m_commitDataFetcher->deleteLater(); m_commitDataFetcher->deleteLater();
m_commitDataFetcher = 0; m_commitDataFetcher = 0;
w->setUpdateInProgress(false);
} }
GitSubmitEditorPanelData GitSubmitEditor::panelData() const GitSubmitEditorPanelData GitSubmitEditor::panelData() const

View File

@@ -583,6 +583,11 @@ void SubmitEditorWidget::setUpdateInProgress(bool value)
updateSubmitAction(); updateSubmitAction();
} }
bool SubmitEditorWidget::updateInProgress() const
{
return d->m_updateInProgress;
}
QString SubmitEditorWidget::commitName() const QString SubmitEditorWidget::commitName() const
{ {
return tr("&Commit"); return tr("&Commit");

View File

@@ -105,6 +105,7 @@ public:
virtual bool canSubmit() const; virtual bool canSubmit() const;
void setUpdateInProgress(bool value); void setUpdateInProgress(bool value);
bool updateInProgress() const;
signals: signals:
void diffSelected(const QList<int> &); void diffSelected(const QList<int> &);