Author: Jan Svoboda Date: 2023-02-07T09:26:56-08:00 New Revision: 152f2914607ffe632202ee660208d6dfba6c8870
URL: https://github.com/llvm/llvm-project/commit/152f2914607ffe632202ee660208d6dfba6c8870 DIFF: https://github.com/llvm/llvm-project/commit/152f2914607ffe632202ee660208d6dfba6c8870.diff LOG: [clang][deps] Fix race condition D140176 introduced new `FullDeps` API that's not thread-safe, breaking the class invariant. This was causing race condition when `clang-scan-deps` was run with multiple threads. Reviewed By: steven_wu, akyrtzi Differential Revision: https://reviews.llvm.org/D143428 Added: Modified: clang/tools/clang-scan-deps/ClangScanDeps.cpp Removed: ################################################################################ diff --git a/clang/tools/clang-scan-deps/ClangScanDeps.cpp b/clang/tools/clang-scan-deps/ClangScanDeps.cpp index 41bc0ea7f0247..1458d11eb323f 100644 --- a/clang/tools/clang-scan-deps/ClangScanDeps.cpp +++ b/clang/tools/clang-scan-deps/ClangScanDeps.cpp @@ -252,14 +252,17 @@ class FullDeps { public: void mergeDeps(StringRef Input, TranslationUnitDeps TUDeps, size_t InputIndex) { + mergeDeps(std::move(TUDeps.ModuleGraph), InputIndex); + InputDeps ID; ID.FileName = std::string(Input); ID.ContextHash = std::move(TUDeps.ID.ContextHash); ID.FileDeps = std::move(TUDeps.FileDeps); ID.ModuleDeps = std::move(TUDeps.ClangModuleDeps); - mergeDeps(std::move(TUDeps.ModuleGraph), InputIndex); ID.DriverCommandLine = std::move(TUDeps.DriverCommandLine); ID.Commands = std::move(TUDeps.Commands); + + std::unique_lock<std::mutex> ul(Lock); Inputs.push_back(std::move(ID)); } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits