From 2fe3589acdbb87a6beb6173bb9b56d1bdab95d6a Mon Sep 17 00:00:00 2001 From: =?utf8?q?Nicolai=20H=C3=A4hnle?= Date: Wed, 29 Jun 2022 16:14:55 +0200 Subject: [PATCH] ManagedStatic: remove from PluginLoader Differential Revision: https://reviews.llvm.org/D129123 --- llvm/lib/Support/PluginLoader.cpp | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/llvm/lib/Support/PluginLoader.cpp b/llvm/lib/Support/PluginLoader.cpp index 6fe195f..cbe413c 100644 --- a/llvm/lib/Support/PluginLoader.cpp +++ b/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 using namespace llvm; -static ManagedStatic > Plugins; -static ManagedStatic > PluginsLock; +namespace { + +struct Plugins { + sys::SmartMutex Lock; + std::vector List; +}; + +Plugins &getPlugins() { + static Plugins P; + return P; +} + +} // anonymous namespace void PluginLoader::operator=(const std::string &Filename) { - sys::SmartScopedLock Lock(*PluginsLock); + auto &P = getPlugins(); + sys::SmartScopedLock 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 Lock(*PluginsLock); - return Plugins.isConstructed() ? Plugins->size() : 0; + auto &P = getPlugins(); + sys::SmartScopedLock Lock(P.Lock); + return P.List.size(); } std::string &PluginLoader::getPlugin(unsigned num) { - sys::SmartScopedLock Lock(*PluginsLock); - assert(Plugins.isConstructed() && num < Plugins->size() && - "Asking for an out of bounds plugin"); - return (*Plugins)[num]; + auto &P = getPlugins(); + sys::SmartScopedLock Lock(P.Lock); + assert(num < P.List.size() && "Asking for an out of bounds plugin"); + return P.List[num]; } -- 2.7.4