From 408e986f2b2409624b8a329f7a2b9e0ba9b91d7b Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Mon, 3 Jun 2024 13:59:46 +0200 Subject: [PATCH] ClangCodeModel: Fix potential crash ... when removing from the list of FollowSymbol operations. The done() callback of ClangdFollowSymbol messes with the list, so call cancel() after removing the corresponding iterator. Change-Id: Ibb72ffa436598692e48119d93d430bb79bcb0f5e Reviewed-by: hjk --- src/plugins/clangcodemodel/clangdclient.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/plugins/clangcodemodel/clangdclient.cpp b/src/plugins/clangcodemodel/clangdclient.cpp index f3600352642..19cd4bd5a91 100644 --- a/src/plugins/clangcodemodel/clangdclient.cpp +++ b/src/plugins/clangcodemodel/clangdclient.cpp @@ -1011,9 +1011,10 @@ void ClangdClient::followSymbol(TextDocument *document, : ClangdFollowSymbol::Origin::Code; if (origin == ClangdFollowSymbol::Origin::User) { for (auto it = d->followSymbolOps.begin(); it != d->followSymbolOps.end(); ) { - if ((*it)->isInteractive()) { - (*it)->cancel(); + ClangdFollowSymbol * const followSymbol = *it; + if (followSymbol->isInteractive()) { it = d->followSymbolOps.erase(it); + followSymbol->cancel(); } else { ++it; }