From ebf39fb3bfafcbe3f93570062a9f4eea00085196 Mon Sep 17 00:00:00 2001 From: Joe Evans Date: Mon, 7 Mar 2022 23:57:26 +0000 Subject: [PATCH 1/3] Update close libs to not modify map while iterating over opened libraries, rename loaded_libs to loaded_libs_ to signify it is a private member. --- src/initialize.cc | 12 ++++++------ src/initialize.h | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/initialize.cc b/src/initialize.cc index 5cb5b63918ab..cad8fec0bdff 100644 --- a/src/initialize.cc +++ b/src/initialize.cc @@ -103,7 +103,7 @@ LibraryInitializer::LibraryInitializer() LibraryInitializer::~LibraryInitializer() = default; bool LibraryInitializer::lib_is_loaded(const std::string& path) const { - return loaded_libs.count(path) > 0; + return loaded_libs_.count(path) > 0; } /*! @@ -139,9 +139,9 @@ void* LibraryInitializer::lib_load(const char* path) { } #endif // _WIN32 or _WIN64 or __WINDOWS__ // then store the pointer to the library - loaded_libs[path] = handle; + loaded_libs_[path] = handle; } else { - handle = loaded_libs.at(path); + handle = loaded_libs_.at(path); } return handle; } @@ -152,7 +152,7 @@ void* LibraryInitializer::lib_load(const char* path) { */ void LibraryInitializer::lib_close(void* handle) { std::string libpath; - for (const auto& l : loaded_libs) { + for (const auto& l : loaded_libs_) { if (l.second == handle) { libpath = l.first; break; @@ -167,7 +167,6 @@ void LibraryInitializer::lib_close(void* handle) { << " loaded from: '" << libpath << "': " << dlerror(); } #endif // _WIN32 or _WIN64 or __WINDOWS__ - loaded_libs.erase(libpath); } /*! @@ -393,9 +392,10 @@ SIGNAL_HANDLER(SIGBUS, SIGBUSHandler, false); #endif void LibraryInitializer::close_open_libs() { - for (const auto& l : loaded_libs) { + for (const auto& l : loaded_libs_) { lib_close(l.second); } + loaded_libs_.clear(); } /** diff --git a/src/initialize.h b/src/initialize.h index 5a1062afc4a6..35cef3cfc44e 100644 --- a/src/initialize.h +++ b/src/initialize.h @@ -104,7 +104,7 @@ class LibraryInitializer { void close_open_libs(); - loaded_libs_t loaded_libs; + loaded_libs_t loaded_libs_; }; /*! From 4d5bcd42804b40a79b23d9eaa765a96b431160fa Mon Sep 17 00:00:00 2001 From: Joe Evans Date: Tue, 8 Mar 2022 00:27:16 +0000 Subject: [PATCH 2/3] Clean up and simplify library close code. --- src/initialize.cc | 12 ++---------- src/initialize.h | 2 +- 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/src/initialize.cc b/src/initialize.cc index cad8fec0bdff..1b099f95d5c1 100644 --- a/src/initialize.cc +++ b/src/initialize.cc @@ -150,15 +150,7 @@ void* LibraryInitializer::lib_load(const char* path) { * \brief Closes the loaded dynamic shared library file * \param handle library file handle */ -void LibraryInitializer::lib_close(void* handle) { - std::string libpath; - for (const auto& l : loaded_libs_) { - if (l.second == handle) { - libpath = l.first; - break; - } - } - CHECK(!libpath.empty()); +void LibraryInitializer::lib_close(void* handle, const std::string &libpath) { #if defined(_WIN32) || defined(_WIN64) || defined(__WINDOWS__) FreeLibrary((HMODULE)handle); #else @@ -393,7 +385,7 @@ SIGNAL_HANDLER(SIGBUS, SIGBUSHandler, false); void LibraryInitializer::close_open_libs() { for (const auto& l : loaded_libs_) { - lib_close(l.second); + lib_close(l.second, l.first); } loaded_libs_.clear(); } diff --git a/src/initialize.h b/src/initialize.h index 35cef3cfc44e..dea5b77358e9 100644 --- a/src/initialize.h +++ b/src/initialize.h @@ -64,7 +64,7 @@ class LibraryInitializer { // Library loading bool lib_is_loaded(const std::string& path) const; void* lib_load(const char* path); - void lib_close(void* handle); + void lib_close(void* handle, const std::string& libpath); static void get_sym(void* handle, void** func, const char* name); /** From e6bc4f61e365bc0b225f268dd46999e36b5f0ea5 Mon Sep 17 00:00:00 2001 From: Joe Evans Date: Tue, 8 Mar 2022 00:34:48 +0000 Subject: [PATCH 3/3] Fix clang-format. --- src/initialize.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/initialize.cc b/src/initialize.cc index 1b099f95d5c1..cfad17d314ab 100644 --- a/src/initialize.cc +++ b/src/initialize.cc @@ -150,7 +150,7 @@ void* LibraryInitializer::lib_load(const char* path) { * \brief Closes the loaded dynamic shared library file * \param handle library file handle */ -void LibraryInitializer::lib_close(void* handle, const std::string &libpath) { +void LibraryInitializer::lib_close(void* handle, const std::string& libpath) { #if defined(_WIN32) || defined(_WIN64) || defined(__WINDOWS__) FreeLibrary((HMODULE)handle); #else