From feac99c9acb49c423ec2392df803f07a0f199b6f Mon Sep 17 00:00:00 2001 From: Ivan Donchevskii Date: Mon, 23 Apr 2018 12:15:42 +0200 Subject: [PATCH] Clang: Fix possible future watcher issues in local renaming Use the same code pattern as in asynchronous branch of CppUseSelectionsUpdater::update. Change-Id: I7c06b883a5abe1324cb63fa410247ef7f50321ae Reviewed-by: Nikolai Kosjar --- .../clangcodemodel/clangrefactoringengine.cpp | 12 ++++++++---- src/plugins/clangcodemodel/clangrefactoringengine.h | 2 +- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/plugins/clangcodemodel/clangrefactoringengine.cpp b/src/plugins/clangcodemodel/clangrefactoringengine.cpp index d639e276673..bb985a650e4 100644 --- a/src/plugins/clangcodemodel/clangrefactoringengine.cpp +++ b/src/plugins/clangcodemodel/clangrefactoringengine.cpp @@ -51,10 +51,14 @@ void RefactoringEngine::startLocalRenaming(const CppTools::CursorInEditor &data, if (cursorFuture.isCanceled()) return defaultCallback(); - QObject::connect(&m_watcher, &FutureCursorWatcher::finished, [=]() { - if (m_watcher.isCanceled()) + if (m_watcher) + m_watcher->cancel(); + + m_watcher.reset(new FutureCursorWatcher()); + QObject::connect(m_watcher.get(), &FutureCursorWatcher::finished, [=]() { + if (m_watcher->isCanceled()) return defaultCallback(); - const CppTools::CursorInfo info = m_watcher.result(); + const CppTools::CursorInfo info = m_watcher->result(); if (info.useRanges.empty()) return defaultCallback(); @@ -72,7 +76,7 @@ void RefactoringEngine::startLocalRenaming(const CppTools::CursorInEditor &data, renameSymbolsCallback(symbolName, container, data.cursor().document()->revision()); }); - m_watcher.setFuture(cursorFuture); + m_watcher->setFuture(cursorFuture); } } diff --git a/src/plugins/clangcodemodel/clangrefactoringengine.h b/src/plugins/clangcodemodel/clangrefactoringengine.h index 10ad96aa0df..424f9a2e5cc 100644 --- a/src/plugins/clangcodemodel/clangrefactoringengine.h +++ b/src/plugins/clangcodemodel/clangrefactoringengine.h @@ -55,7 +55,7 @@ public: private: using FutureCursorWatcher = QFutureWatcher; - FutureCursorWatcher m_watcher; + std::unique_ptr m_watcher; }; } // namespace ClangRefactoring