diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2023-04-14 21:41:27 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2023-06-22 18:20:56 +0000 |
commit | bdd1243df58e60e85101c09001d9812a789b6bc4 (patch) | |
tree | a1ce621c7301dd47ba2ddc3b8eaa63b441389481 /contrib/llvm-project/llvm/lib/Support/PluginLoader.cpp | |
parent | 781624ca2d054430052c828ba8d2c2eaf2d733e7 (diff) | |
parent | e3b557809604d036af6e00c60f012c2025b59a5e (diff) |
Diffstat (limited to 'contrib/llvm-project/llvm/lib/Support/PluginLoader.cpp')
-rw-r--r-- | contrib/llvm-project/llvm/lib/Support/PluginLoader.cpp | 34 |
1 files changed, 23 insertions, 11 deletions
diff --git a/contrib/llvm-project/llvm/lib/Support/PluginLoader.cpp b/contrib/llvm-project/llvm/lib/Support/PluginLoader.cpp index 6fe195ffda7a..cbe413ce2556 100644 --- a/contrib/llvm-project/llvm/lib/Support/PluginLoader.cpp +++ b/contrib/llvm-project/llvm/lib/Support/PluginLoader.cpp @@ -13,34 +13,46 @@ #define DONT_GET_PLUGIN_LOADER_OPTION #include "llvm/Support/PluginLoader.h" #include "llvm/Support/DynamicLibrary.h" -#include "llvm/Support/ManagedStatic.h" #include "llvm/Support/Mutex.h" #include "llvm/Support/raw_ostream.h" #include <vector> using namespace llvm; -static ManagedStatic<std::vector<std::string> > Plugins; -static ManagedStatic<sys::SmartMutex<true> > PluginsLock; +namespace { + +struct Plugins { + sys::SmartMutex<true> Lock; + std::vector<std::string> List; +}; + +Plugins &getPlugins() { + static Plugins P; + return P; +} + +} // anonymous namespace void PluginLoader::operator=(const std::string &Filename) { - sys::SmartScopedLock<true> Lock(*PluginsLock); + auto &P = getPlugins(); + sys::SmartScopedLock<true> Lock(P.Lock); std::string Error; if (sys::DynamicLibrary::LoadLibraryPermanently(Filename.c_str(), &Error)) { errs() << "Error opening '" << Filename << "': " << Error << "\n -load request ignored.\n"; } else { - Plugins->push_back(Filename); + P.List.push_back(Filename); } } unsigned PluginLoader::getNumPlugins() { - sys::SmartScopedLock<true> Lock(*PluginsLock); - return Plugins.isConstructed() ? Plugins->size() : 0; + auto &P = getPlugins(); + sys::SmartScopedLock<true> Lock(P.Lock); + return P.List.size(); } std::string &PluginLoader::getPlugin(unsigned num) { - sys::SmartScopedLock<true> Lock(*PluginsLock); - assert(Plugins.isConstructed() && num < Plugins->size() && - "Asking for an out of bounds plugin"); - return (*Plugins)[num]; + auto &P = getPlugins(); + sys::SmartScopedLock<true> Lock(P.Lock); + assert(num < P.List.size() && "Asking for an out of bounds plugin"); + return P.List[num]; } |