summaryrefslogtreecommitdiffstats
path: root/clang/tools/libclang/CXString.cpp
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2011-08-17 22:19:53 +0000
committerTed Kremenek <kremenek@apple.com>2011-08-17 22:19:53 +0000
commit5b8ad40664b947f752bf567af99df08e6691bef6 (patch)
treeb254f2c733e3e0e87db25f0c02f2e27755a78444 /clang/tools/libclang/CXString.cpp
parentc482a1929490ca2bcba5060d99a06b06bf3edac9 (diff)
downloadbcm5719-llvm-5b8ad40664b947f752bf567af99df08e6691bef6.tar.gz
bcm5719-llvm-5b8ad40664b947f752bf567af99df08e6691bef6.zip
[libclang] Workaround potential race condition with code completion AllocatedResults being freed after a CXTranslationUnit.
The Container USR's CXString had its underlying data owned by the CXTranslationUnit's string pool. This would result in trying to access freed memory. llvm-svn: 137887
Diffstat (limited to 'clang/tools/libclang/CXString.cpp')
-rw-r--r--clang/tools/libclang/CXString.cpp4
1 files changed, 4 insertions, 0 deletions
diff --git a/clang/tools/libclang/CXString.cpp b/clang/tools/libclang/CXString.cpp
index 268655ab8a5..bb09cd5cdc2 100644
--- a/clang/tools/libclang/CXString.cpp
+++ b/clang/tools/libclang/CXString.cpp
@@ -101,6 +101,10 @@ void cxstring::disposeCXStringBuf(CXStringBuf *buf) {
static_cast<CXStringPool*>(buf->TU->StringPool)->push_back(buf);
}
+bool cxstring::isManagedByPool(CXString str) {
+ return ((CXStringFlag) str.private_flags) == CXS_StringBuf;
+}
+
//===----------------------------------------------------------------------===//
// libClang public APIs.
//===----------------------------------------------------------------------===//
OpenPOWER on IntegriCloud