ClangCodeModel: Fix potential crash when canceling indexing

Change-Id: I9fe33f037fbb8b02a2890ec34c3a4f3584c4615e
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Christian Kandeler
2024-12-09 12:27:25 +01:00
parent 7abf8ae477
commit 5cbe7d8819

View File

@@ -21,17 +21,13 @@
#include <coreplugin/icore.h> #include <coreplugin/icore.h>
#include <cplusplus/AST.h> #include <cplusplus/AST.h>
#include <cplusplus/ASTPath.h> #include <cplusplus/ASTPath.h>
#include <cplusplus/Icons.h>
#include <cppeditor/compilationdb.h> #include <cppeditor/compilationdb.h>
#include <cppeditor/cppcodemodelsettings.h> #include <cppeditor/cppcodemodelsettings.h>
#include <cppeditor/cppeditorconstants.h>
#include <cppeditor/cppeditorwidget.h> #include <cppeditor/cppeditorwidget.h>
#include <cppeditor/cppmodelmanager.h> #include <cppeditor/cppmodelmanager.h>
#include <cppeditor/cpprefactoringchanges.h> #include <cppeditor/cpprefactoringchanges.h>
#include <cppeditor/cppsemanticinfo.h> #include <cppeditor/cppsemanticinfo.h>
#include <cppeditor/cpptoolsreuse.h> #include <cppeditor/cpptoolsreuse.h>
#include <cppeditor/cppvirtualfunctionassistprovider.h>
#include <cppeditor/cppvirtualfunctionproposalitem.h>
#include <cppeditor/semantichighlighter.h> #include <cppeditor/semantichighlighter.h>
#include <languageclient/diagnosticmanager.h> #include <languageclient/diagnosticmanager.h>
#include <languageclient/languageclienthoverhandler.h> #include <languageclient/languageclienthoverhandler.h>
@@ -45,16 +41,12 @@
#include <languageserverprotocol/progresssupport.h> #include <languageserverprotocol/progresssupport.h>
#include <projectexplorer/buildconfiguration.h> #include <projectexplorer/buildconfiguration.h>
#include <projectexplorer/devicesupport/idevice.h> #include <projectexplorer/devicesupport/idevice.h>
#include <projectexplorer/kitaspects.h> #include <projectexplorer/devicesupport/devicekitaspects.h>
#include <projectexplorer/project.h> #include <projectexplorer/project.h>
#include <projectexplorer/projectnodes.h> #include <projectexplorer/projectnodes.h>
#include <projectexplorer/projecttree.h> #include <projectexplorer/projecttree.h>
#include <projectexplorer/projectmanager.h> #include <projectexplorer/projectmanager.h>
#include <projectexplorer/target.h> #include <projectexplorer/target.h>
#include <projectexplorer/taskhub.h>
#include <texteditor/codeassist/assistinterface.h>
#include <texteditor/codeassist/iassistprocessor.h>
#include <texteditor/codeassist/iassistprovider.h>
#include <texteditor/texteditor.h> #include <texteditor/texteditor.h>
#include <utils/algorithm.h> #include <utils/algorithm.h>
#include <utils/async.h> #include <utils/async.h>
@@ -62,9 +54,7 @@
#include <utils/environment.h> #include <utils/environment.h>
#include <utils/fileutils.h> #include <utils/fileutils.h>
#include <utils/mimeconstants.h> #include <utils/mimeconstants.h>
#include <utils/itemviews.h>
#include <utils/theme/theme.h> #include <utils/theme/theme.h>
#include <utils/utilsicons.h>
#include <QAction> #include <QAction>
#include <QElapsedTimer> #include <QElapsedTimer>
@@ -462,8 +452,10 @@ ClangdClient::ClangdClient(Project *project, const Utils::FilePath &jsonDbDir, c
progressManager()->setTitleForToken( progressManager()->setTitleForToken(
indexingToken(), project ? Tr::tr("Indexing %1 with clangd").arg(project->displayName()) indexingToken(), project ? Tr::tr("Indexing %1 with clangd").arg(project->displayName())
: Tr::tr("Indexing session with clangd")); : Tr::tr("Indexing session with clangd"));
progressManager()->setCancelHandlerForToken(indexingToken(), [this, project]() { progressManager()->setCancelHandlerForToken(indexingToken(), [this, p = QPointer(project)]() {
CppEditor::ClangdProjectSettings projectSettings(project); if (!p)
return;
CppEditor::ClangdProjectSettings projectSettings(p);
projectSettings.blockIndexing(); projectSettings.blockIndexing();
progressManager()->endProgressReport(indexingToken()); progressManager()->endProgressReport(indexingToken());
}); });