projects
/
oota-llvm.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
System/Path/Windows: Change GetRootDirectory to return file:/// instead of C:/.
[oota-llvm.git]
/
lib
/
System
/
DynamicLibrary.cpp
diff --git
a/lib/System/DynamicLibrary.cpp
b/lib/System/DynamicLibrary.cpp
index 6f6890c06c4997b287963ff9e334935ac65f076f..3da50a28b656b97e12fe768c2d6ce3d20ee2a2f3 100644
(file)
--- a/
lib/System/DynamicLibrary.cpp
+++ b/
lib/System/DynamicLibrary.cpp
@@
-15,6
+15,7
@@
//===----------------------------------------------------------------------===//
#include "llvm/System/DynamicLibrary.h"
//===----------------------------------------------------------------------===//
#include "llvm/System/DynamicLibrary.h"
+#include "llvm/System/Mutex.h"
#include "llvm/Config/config.h"
#include <cstdio>
#include <cstring>
#include "llvm/Config/config.h"
#include <cstdio>
#include <cstring>
@@
-60,6
+61,7
@@
using namespace llvm::sys;
//=== independent code.
//===----------------------------------------------------------------------===//
//=== independent code.
//===----------------------------------------------------------------------===//
+static SmartMutex<true> HandlesMutex;
static std::vector<void *> *OpenedHandles = 0;
static std::vector<void *> *OpenedHandles = 0;
@@
-70,6
+72,13
@@
bool DynamicLibrary::LoadLibraryPermanently(const char *Filename,
if (ErrMsg) *ErrMsg = dlerror();
return true;
}
if (ErrMsg) *ErrMsg = dlerror();
return true;
}
+#ifdef __CYGWIN__
+ // Cygwin searches symbols only in the main
+ // with the handle of dlopen(NULL, RTLD_GLOBAL).
+ if (Filename == NULL)
+ H = RTLD_DEFAULT;
+#endif
+ SmartScopedLock<true> Lock(HandlesMutex);
if (OpenedHandles == 0)
OpenedHandles = new std::vector<void *>();
OpenedHandles->push_back(H);
if (OpenedHandles == 0)
OpenedHandles = new std::vector<void *>();
OpenedHandles->push_back(H);
@@
-104,6
+113,7
@@
void* DynamicLibrary::SearchForAddressOfSymbol(const char* symbolName) {
#if HAVE_DLFCN_H
// Now search the libraries.
#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) {
if (OpenedHandles) {
for (std::vector<void *>::iterator I = OpenedHandles->begin(),
E = OpenedHandles->end(); I != E; ++I) {