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