From: Owen Anderson Date: Tue, 9 Nov 2010 00:36:06 +0000 (+0000) Subject: Fix PR8441, a thread unsafe static variable in our dynamic library loading facilities. X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=9ac18d562d9839e881165e8f8a25d87b9f8279e8;p=oota-llvm.git Fix PR8441, a thread unsafe static variable in our dynamic library loading facilities. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@118463 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/System/DynamicLibrary.cpp b/lib/System/DynamicLibrary.cpp index 660db492d6b..3da50a28b65 100644 --- a/lib/System/DynamicLibrary.cpp +++ b/lib/System/DynamicLibrary.cpp @@ -15,6 +15,7 @@ //===----------------------------------------------------------------------===// #include "llvm/System/DynamicLibrary.h" +#include "llvm/System/Mutex.h" #include "llvm/Config/config.h" #include #include @@ -60,6 +61,7 @@ using namespace llvm::sys; //=== independent code. //===----------------------------------------------------------------------===// +static SmartMutex HandlesMutex; static std::vector *OpenedHandles = 0; @@ -76,6 +78,7 @@ bool DynamicLibrary::LoadLibraryPermanently(const char *Filename, if (Filename == NULL) H = RTLD_DEFAULT; #endif + SmartScopedLock Lock(HandlesMutex); if (OpenedHandles == 0) OpenedHandles = new std::vector(); OpenedHandles->push_back(H); @@ -110,6 +113,7 @@ void* DynamicLibrary::SearchForAddressOfSymbol(const char* symbolName) { #if HAVE_DLFCN_H // Now search the libraries. + SmartScopedLock Lock(HandlesMutex); if (OpenedHandles) { for (std::vector::iterator I = OpenedHandles->begin(), E = OpenedHandles->end(); I != E; ++I) {