[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