[clang-tools-extra] 5056694 - [clangd] Fix possible assertion fail in TUScheduler
Sam McCall via cfe-commits
cfe-commits at lists.llvm.org
Fri Jul 2 06:57:46 PDT 2021
Author: Sam McCall
Date: 2021-07-02T15:57:39+02:00
New Revision: 50566947e98ea845030cfa3b4c199fb9a2052d53
URL: https://github.com/llvm/llvm-project/commit/50566947e98ea845030cfa3b4c199fb9a2052d53
DIFF: https://github.com/llvm/llvm-project/commit/50566947e98ea845030cfa3b4c199fb9a2052d53.diff
LOG: [clangd] Fix possible assertion fail in TUScheduler
BlockUntilIdle is supposed to return false if it fails.
If an intermediate step fails to clear the queue, we shouldn't
charge ahead and assert on the state of the queue.
Added:
Modified:
clang-tools-extra/clangd/TUScheduler.cpp
Removed:
################################################################################
diff --git a/clang-tools-extra/clangd/TUScheduler.cpp b/clang-tools-extra/clangd/TUScheduler.cpp
index 09c68a3a250b..05ce4f9c8272 100644
--- a/clang-tools-extra/clangd/TUScheduler.cpp
+++ b/clang-tools-extra/clangd/TUScheduler.cpp
@@ -1380,11 +1380,13 @@ bool ASTWorker::blockUntilIdle(Deadline Timeout) const {
};
// Make sure ASTWorker has processed all requests, which might issue new
// updates to PreamblePeer.
- WaitUntilASTWorkerIsIdle();
+ if (WaitUntilASTWorkerIsIdle())
+ return false;
// Now that ASTWorker processed all requests, ensure PreamblePeer has served
// all update requests. This might create new PreambleRequests for the
// ASTWorker.
- PreamblePeer.blockUntilIdle(Timeout);
+ if (!PreamblePeer.blockUntilIdle(Timeout))
+ return false;
assert(Requests.empty() &&
"No new normal tasks can be scheduled concurrently with "
"blockUntilIdle(): ASTWorker isn't threadsafe");
More information about the cfe-commits
mailing list