diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2012-07-03 16:30:52 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2012-07-03 16:30:52 +0000 |
commit | 817881376e3a40ca54376547dd1cb9ca5def7190 (patch) | |
tree | 79c8d2af3f188629e965bcdb937b41da939eb9f5 /lib/Frontend/ASTUnit.cpp | |
parent | 41de13b3b6f7bb92d8d7aca965472086eee463cf (diff) |
[libclang] Protect against a race condition where a thread
may be destroying an ASTUnit while cleanupOnDiskMapAtExit is
getting called.
rdar://11781241
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@159664 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Frontend/ASTUnit.cpp')
-rw-r--r-- | lib/Frontend/ASTUnit.cpp | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/lib/Frontend/ASTUnit.cpp b/lib/Frontend/ASTUnit.cpp index d2f63a80fe..7be25e96b4 100644 --- a/lib/Frontend/ASTUnit.cpp +++ b/lib/Frontend/ASTUnit.cpp @@ -116,7 +116,8 @@ static OnDiskDataMap &getOnDiskDataMap() { } static void cleanupOnDiskMapAtExit(void) { - // No mutex required here since we are leaving the program. + // Use the mutex because there can be an alive thread destroying an ASTUnit. + llvm::MutexGuard Guard(getOnDiskMutex()); OnDiskDataMap &M = getOnDiskDataMap(); for (OnDiskDataMap::iterator I = M.begin(), E = M.end(); I != E; ++I) { // We don't worry about freeing the memory associated with OnDiskDataMap. |