Fix a crash on shutdown inside CallgrindTool

This is a quick fix for 6.0 branch.

Fixes: QTCREATORBUG-26563
Change-Id: Ida0f99a90c2e8515a2ea2b89de7a666f3067f908
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
Jarek Kobus
2021-11-12 14:09:25 +01:00
parent 87c8f4890e
commit 90972ad822

View File

@@ -189,14 +189,14 @@ public:
// Navigation
QAction *m_goBack = nullptr;
QAction *m_goNext = nullptr;
QLineEdit *m_searchFilter = nullptr;
QPointer<QLineEdit> m_searchFilter = nullptr;
// Cost formatting
QAction *m_filterProjectCosts = nullptr;
QAction *m_costAbsolute = nullptr;
QAction *m_costRelative = nullptr;
QAction *m_costRelativeToParent = nullptr;
QComboBox *m_eventCombo = nullptr;
QPointer<QComboBox> m_eventCombo;
QTimer m_updateTimer;
@@ -546,8 +546,10 @@ void CallgrindToolPrivate::setBusyCursor(bool busy)
void CallgrindToolPrivate::selectFunction(const Function *func)
{
if (!func) {
m_flatView->clearSelection();
m_visualization->setFunction(nullptr);
if (m_flatView)
m_flatView->clearSelection();
if (m_visualization)
m_visualization->setFunction(nullptr);
m_callersModel.clear();
m_calleesModel.clear();
return;
@@ -555,15 +557,18 @@ void CallgrindToolPrivate::selectFunction(const Function *func)
const QModelIndex index = m_dataModel.indexForObject(func);
const QModelIndex proxyIndex = m_proxyModel.mapFromSource(index);
m_flatView->selectionModel()->clearSelection();
m_flatView->selectionModel()->setCurrentIndex(proxyIndex,
QItemSelectionModel::ClearAndSelect |
QItemSelectionModel::Rows);
m_flatView->scrollTo(proxyIndex);
if (m_flatView) {
m_flatView->selectionModel()->clearSelection();
m_flatView->selectionModel()->setCurrentIndex(proxyIndex,
QItemSelectionModel::ClearAndSelect |
QItemSelectionModel::Rows);
m_flatView->scrollTo(proxyIndex);
}
m_callersModel.setCalls(func->incomingCalls(), func);
m_calleesModel.setCalls(func->outgoingCalls(), func);
m_visualization->setFunction(func);
if (m_visualization)
m_visualization->setFunction(func);
const Function *item = m_stackBrowser.current();
if (!item || item != func)
@@ -688,7 +693,8 @@ void CallgrindToolPrivate::visualisationFunctionSelected(const Function *functio
void CallgrindToolPrivate::setParseData(ParseData *data)
{
// we have new parse data, invalidate filters in the proxy model
m_visualization->setFunction(nullptr);
if (m_visualization)
m_visualization->setFunction(nullptr);
// invalidate parse data in the data model
delete m_dataModel.parseData();
@@ -704,7 +710,8 @@ void CallgrindToolPrivate::setParseData(ParseData *data)
m_calleesModel.setParseData(data);
m_callersModel.setParseData(data);
updateEventCombo();
if (m_eventCombo)
updateEventCombo();
// clear history for new data
m_stackBrowser.clear();