From 9ac18d562d9839e881165e8f8a25d87b9f8279e8 Mon Sep 17 00:00:00 2001 From: Owen Anderson Date: Tue, 9 Nov 2010 00:36:06 +0000 Subject: 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 --- lib/System/DynamicLibrary.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'lib/System/DynamicLibrary.cpp') diff --git a/lib/System/DynamicLibrary.cpp b/lib/System/DynamicLibrary.cpp index 660db492d6..3da50a28b6 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) { -- cgit v1.2.3-18-g5258