From 90972ad82272a28817c1238b48d2709a33f893e9 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Fri, 12 Nov 2021 14:09:25 +0100 Subject: [PATCH] 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 --- src/plugins/valgrind/callgrindtool.cpp | 31 ++++++++++++++++---------- 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/src/plugins/valgrind/callgrindtool.cpp b/src/plugins/valgrind/callgrindtool.cpp index 2973caa0932..14a8eae45b0 100644 --- a/src/plugins/valgrind/callgrindtool.cpp +++ b/src/plugins/valgrind/callgrindtool.cpp @@ -189,14 +189,14 @@ public: // Navigation QAction *m_goBack = nullptr; QAction *m_goNext = nullptr; - QLineEdit *m_searchFilter = nullptr; + QPointer 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 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();