diff options
author | Vassil Vassilev <v.g.vassilev@gmail.com> | 2017-03-02 14:30:05 +0000 |
---|---|---|
committer | Vassil Vassilev <v.g.vassilev@gmail.com> | 2017-03-02 14:30:05 +0000 |
commit | 8bdc36eccdef81b5b6b5dfe4c2ba66182ee52e02 (patch) | |
tree | e86fc14344c03774a443311a32568b8da4e71d71 | |
parent | 455c2ee39463ca0779849c9248e10c765ad11a77 (diff) | |
download | bcm5719-llvm-8bdc36eccdef81b5b6b5dfe4c2ba66182ee52e02.tar.gz bcm5719-llvm-8bdc36eccdef81b5b6b5dfe4c2ba66182ee52e02.zip |
Do not leak OpenedHandles.
llvm-svn: 296748
-rw-r--r-- | llvm/lib/Support/Windows/DynamicLibrary.inc | 12 |
1 files changed, 2 insertions, 10 deletions
diff --git a/llvm/lib/Support/Windows/DynamicLibrary.inc b/llvm/lib/Support/Windows/DynamicLibrary.inc index 825c1a5d2ea..b22c5ee7e42 100644 --- a/llvm/lib/Support/Windows/DynamicLibrary.inc +++ b/llvm/lib/Support/Windows/DynamicLibrary.inc @@ -9,8 +9,6 @@ // // This file provides the Win32 specific implementation of DynamicLibrary. // -// FIXME: This file leaks OpenedHandles! -// //===----------------------------------------------------------------------===// #include "WindowsSupport.h" @@ -35,7 +33,7 @@ using namespace sys; typedef BOOL (WINAPI *fpEnumerateLoadedModules)(HANDLE,PENUMLOADED_MODULES_CALLBACK64,PVOID); static fpEnumerateLoadedModules fEnumerateLoadedModules; -static DenseSet<HMODULE> *OpenedHandles; +static llvm::ManagedStatic<DenseSet<HMODULE> > OpenedHandles; static bool loadDebugHelp(void) { HMODULE hLib = ::LoadLibraryW(L"Dbghelp.dll"); @@ -59,9 +57,6 @@ DynamicLibrary DynamicLibrary::getPermanentLibrary(const char *filename, if (!filename) { // When no file is specified, enumerate all DLLs and EXEs in the process. - if (OpenedHandles == 0) - OpenedHandles = new DenseSet<HMODULE>(); - if (!fEnumerateLoadedModules) { if (!loadDebugHelp()) { assert(false && "These APIs should always be available"); @@ -89,9 +84,6 @@ DynamicLibrary DynamicLibrary::getPermanentLibrary(const char *filename, return DynamicLibrary(); } - if (OpenedHandles == 0) - OpenedHandles = new DenseSet<HMODULE>(); - // If we've already loaded this library, FreeLibrary() the handle in order to // keep the internal refcount at +1. if (!OpenedHandles->insert(a_handle).second) @@ -137,7 +129,7 @@ void* DynamicLibrary::SearchForAddressOfSymbol(const char* symbolName) { } // Now search the libraries. - if (OpenedHandles) { + if (OpenedHandles.isConstructed()) { for (DenseSet<HMODULE>::iterator I = OpenedHandles->begin(), E = OpenedHandles->end(); I != E; ++I) { FARPROC ptr = GetProcAddress((HMODULE)*I, symbolName); |