[clang-tools-extra] r325132 - [clangd] Fix data race in ClangdThreadingTest.StressTest

Ilya Biryukov via cfe-commits cfe-commits at lists.llvm.org
Wed Feb 14 07:19:20 PST 2018


Author: ibiryukov
Date: Wed Feb 14 07:19:20 2018
New Revision: 325132

URL: http://llvm.org/viewvc/llvm-project?rev=325132&view=rev
Log:
[clangd] Fix data race in ClangdThreadingTest.StressTest

Prior to this patch, same instance of VFS was shared for concurrent
processing of the files in ClangdThreadingTest.StressTest.

It caused a data race as the same instance of InMemoryFileSystem was
mutated from multiple threads using setCurrentWorkingDirectory().

Modified:
    clang-tools-extra/trunk/unittests/clangd/ClangdTests.cpp

Modified: clang-tools-extra/trunk/unittests/clangd/ClangdTests.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/ClangdTests.cpp?rev=325132&r1=325131&r2=325132&view=diff
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/ClangdTests.cpp (original)
+++ clang-tools-extra/trunk/unittests/clangd/ClangdTests.cpp Wed Feb 14 07:19:20 2018
@@ -76,22 +76,6 @@ private:
   VFSTag LastVFSTag = VFSTag();
 };
 
-class ConstantFSProvider : public FileSystemProvider {
-public:
-  ConstantFSProvider(IntrusiveRefCntPtr<vfs::FileSystem> FS,
-                     VFSTag Tag = VFSTag())
-      : FS(std::move(FS)), Tag(std::move(Tag)) {}
-
-  Tagged<IntrusiveRefCntPtr<vfs::FileSystem>>
-  getTaggedFileSystem(PathRef File) override {
-    return make_tagged(FS, Tag);
-  }
-
-private:
-  IntrusiveRefCntPtr<vfs::FileSystem> FS;
-  VFSTag Tag;
-};
-
 /// Replaces all patterns of the form 0x123abc with spaces
 std::string replacePtrsInDump(std::string const &Dump) {
   llvm::Regex RE("0x[0-9a-fA-F]+");
@@ -500,11 +484,10 @@ int d;
     FilePaths.push_back(getVirtualTestFilePath(std::string("Foo") +
                                                std::to_string(I) + ".cpp"));
   // Mark all of those files as existing.
-  llvm::StringMap<std::string> FileContents;
+  MockFSProvider FS;
   for (auto &&FilePath : FilePaths)
-    FileContents[FilePath] = "";
+    FS.Files[FilePath] = "";
 
-  ConstantFSProvider FS(buildTestFS(FileContents));
 
   struct FileStat {
     unsigned HitsWithoutErrors = 0;




More information about the cfe-commits mailing list