Make DynamicLibrary thread-safe w/r/t call to dlerror() after dlopen(). PR10718

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@138260 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Support/Windows/DynamicLibrary.inc b/lib/Support/Windows/DynamicLibrary.inc
index 5a0b249..83da82a 100644
--- a/lib/Support/Windows/DynamicLibrary.inc
+++ b/lib/Support/Windows/DynamicLibrary.inc
@@ -71,9 +71,10 @@
 
 DynamicLibrary DynamicLibrary::getPermanentLibrary(const char *filename,
                                                    std::string *errMsg) {
+  SmartScopedLock<true> lock(getMutex());
+
   if (!filename) {
     // When no file is specified, enumerate all DLLs and EXEs in the process.
-    SmartScopedLock<true> lock(getMutex());
     if (OpenedHandles == 0)
       OpenedHandles = new DenseSet<HMODULE>();
 
@@ -90,7 +91,6 @@
     return DynamicLibrary();
   }
 
-  SmartScopedLock<true> lock(getMutex());
   if (OpenedHandles == 0)
     OpenedHandles = new DenseSet<HMODULE>();