ClangCodeModel: Prevent recursive delete of FollowSymbolData

Fixes: QTCREATORBUG-27323
Change-Id: I3bcff6516e197b62b1a3772e6db598038c5977c9
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Christian Kandeler
2022-04-11 13:18:05 +02:00
parent daebcfdca9
commit 514ceb25e9

View File

@@ -656,6 +656,7 @@ public:
void update();
void finalize();
void resetData(bool resetFollowSymbolData);
private:
IAssistProposal *perform(const AssistInterface *) override
@@ -668,8 +669,6 @@ private:
return createProposal(false);
}
void resetData();
IAssistProposal *immediateProposalImpl() const;
IAssistProposal *createProposal(bool final) const;
CppEditor::VirtualFunctionProposalItem *createEntry(const QString &name,
@@ -705,7 +704,7 @@ public:
{
closeTempDocuments();
if (virtualFuncAssistProcessor)
virtualFuncAssistProcessor->cancel();
virtualFuncAssistProcessor->resetData(false);
for (const MessageId &id : qAsConst(pendingSymbolInfoRequests))
q->cancelRequest(id);
for (const MessageId &id : qAsConst(pendingGotoImplRequests))
@@ -2982,7 +2981,7 @@ void ClangdClient::Private::handleSemanticTokens(TextDocument *doc,
void ClangdClient::VirtualFunctionAssistProcessor::cancel()
{
resetData();
resetData(true);
}
void ClangdClient::VirtualFunctionAssistProcessor::update()
@@ -3004,15 +3003,16 @@ void ClangdClient::VirtualFunctionAssistProcessor::finalize()
} else {
setAsyncProposalAvailable(proposal);
}
resetData();
resetData(true);
}
void ClangdClient::VirtualFunctionAssistProcessor::resetData()
void ClangdClient::VirtualFunctionAssistProcessor::resetData(bool resetFollowSymbolData)
{
if (!m_data)
return;
m_data->followSymbolData->virtualFuncAssistProcessor = nullptr;
m_data->followSymbolData.reset();
if (resetFollowSymbolData)
m_data->followSymbolData.reset();
m_data = nullptr;
}