[clang-tools-extra] aefad85 - [clangd] Fix data race surfaced in clangd-tsan buildbot
Kadir Cetinkaya via cfe-commits
cfe-commits at lists.llvm.org
Wed May 8 03:01:00 PDT 2024
Author: Kadir Cetinkaya
Date: 2024-05-08T12:00:54+02:00
New Revision: aefad851672e6dd17592895066a39aa5b388e5db
URL: https://github.com/llvm/llvm-project/commit/aefad851672e6dd17592895066a39aa5b388e5db
DIFF: https://github.com/llvm/llvm-project/commit/aefad851672e6dd17592895066a39aa5b388e5db.diff
LOG: [clangd] Fix data race surfaced in clangd-tsan buildbot
We can have concurrent accesses to same PreambleData (e.g.
code-completion and ast-builds). Hence we need to
deep copy TargetOpts.
Added:
Modified:
clang-tools-extra/clangd/Preamble.cpp
Removed:
################################################################################
diff --git a/clang-tools-extra/clangd/Preamble.cpp b/clang-tools-extra/clangd/Preamble.cpp
index d5818e0ca309b..ecd490145dd3c 100644
--- a/clang-tools-extra/clangd/Preamble.cpp
+++ b/clang-tools-extra/clangd/Preamble.cpp
@@ -918,7 +918,9 @@ void PreamblePatch::apply(CompilerInvocation &CI) const {
// no guarantees around using arbitrary options when reusing PCHs, and
//
diff erent target opts can result in crashes, see
// ParsedASTTest.PreambleWithDifferentTarget.
- CI.TargetOpts = Baseline->TargetOpts;
+ // Make sure this is a deep copy, as the same Baseline might be used
+ // concurrently.
+ *CI.TargetOpts = *Baseline->TargetOpts;
// No need to map an empty file.
if (PatchContents.empty())
More information about the cfe-commits
mailing list