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,7 +546,9 @@ void CallgrindToolPrivate::setBusyCursor(bool busy)
void CallgrindToolPrivate::selectFunction(const Function *func) void CallgrindToolPrivate::selectFunction(const Function *func)
{ {
if (!func) { if (!func) {
if (m_flatView)
m_flatView->clearSelection(); m_flatView->clearSelection();
if (m_visualization)
m_visualization->setFunction(nullptr); m_visualization->setFunction(nullptr);
m_callersModel.clear(); m_callersModel.clear();
m_calleesModel.clear(); m_calleesModel.clear();
@@ -555,14 +557,17 @@ 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);
if (m_flatView) {
m_flatView->selectionModel()->clearSelection(); m_flatView->selectionModel()->clearSelection();
m_flatView->selectionModel()->setCurrentIndex(proxyIndex, m_flatView->selectionModel()->setCurrentIndex(proxyIndex,
QItemSelectionModel::ClearAndSelect | QItemSelectionModel::ClearAndSelect |
QItemSelectionModel::Rows); QItemSelectionModel::Rows);
m_flatView->scrollTo(proxyIndex); 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);
if (m_visualization)
m_visualization->setFunction(func); m_visualization->setFunction(func);
const Function *item = m_stackBrowser.current(); const Function *item = m_stackBrowser.current();
@@ -688,6 +693,7 @@ 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
if (m_visualization)
m_visualization->setFunction(nullptr); m_visualization->setFunction(nullptr);
// invalidate parse data in the data model // invalidate parse data in the data model
@@ -704,6 +710,7 @@ void CallgrindToolPrivate::setParseData(ParseData *data)
m_calleesModel.setParseData(data); m_calleesModel.setParseData(data);
m_callersModel.setParseData(data); m_callersModel.setParseData(data);
if (m_eventCombo)
updateEventCombo(); updateEventCombo();
// clear history for new data // clear history for new data