diff options
| author | Owen Anderson <resistor@mac.com> | 2010-11-09 00:36:06 +0000 |
|---|---|---|
| committer | Owen Anderson <resistor@mac.com> | 2010-11-09 00:36:06 +0000 |
| commit | 1fc8ec1d4b8549a4d27ff45962c8c0b33c0d85a8 (patch) | |
| tree | 24e1bd1607739342895ec7bddefbb565c462915d /llvm/lib/System | |
| parent | 1b83ed5f7c1a9bd76523519f49b858562d568496 (diff) | |
| download | bcm5719-llvm-1fc8ec1d4b8549a4d27ff45962c8c0b33c0d85a8.tar.gz bcm5719-llvm-1fc8ec1d4b8549a4d27ff45962c8c0b33c0d85a8.zip | |
Fix PR8441, a thread unsafe static variable in our dynamic library loading facilities.
llvm-svn: 118463
Diffstat (limited to 'llvm/lib/System')
| -rw-r--r-- | llvm/lib/System/DynamicLibrary.cpp | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/llvm/lib/System/DynamicLibrary.cpp b/llvm/lib/System/DynamicLibrary.cpp index 660db492d6b..3da50a28b65 100644 --- a/llvm/lib/System/DynamicLibrary.cpp +++ b/llvm/lib/System/DynamicLibrary.cpp @@ -15,6 +15,7 @@ //===----------------------------------------------------------------------===// #include "llvm/System/DynamicLibrary.h" +#include "llvm/System/Mutex.h" #include "llvm/Config/config.h" #include <cstdio> #include <cstring> @@ -60,6 +61,7 @@ using namespace llvm::sys; //=== independent code. //===----------------------------------------------------------------------===// +static SmartMutex<true> HandlesMutex; static std::vector<void *> *OpenedHandles = 0; @@ -76,6 +78,7 @@ bool DynamicLibrary::LoadLibraryPermanently(const char *Filename, if (Filename == NULL) H = RTLD_DEFAULT; #endif + SmartScopedLock<true> Lock(HandlesMutex); if (OpenedHandles == 0) OpenedHandles = new std::vector<void *>(); OpenedHandles->push_back(H); @@ -110,6 +113,7 @@ void* DynamicLibrary::SearchForAddressOfSymbol(const char* symbolName) { #if HAVE_DLFCN_H // Now search the libraries. + SmartScopedLock<true> Lock(HandlesMutex); if (OpenedHandles) { for (std::vector<void *>::iterator I = OpenedHandles->begin(), E = OpenedHandles->end(); I != E; ++I) { |

