@@ -44,7 +44,9 @@ class ClassLoaderDependency
4444protected:
4545 ClassLoaderDependency ()
4646 {
47- // make the static variable in `ClassLoader` destroyed after `active_class_loaders_`
47+ // make the static variable in `ClassLoader` destroyed after `class_loader_ptrs_`,
48+ // which is a member of ClassLoaderPtrVectorImpl defined as a static instance in the
49+ // `getClassLoaderPtrVectorImpl`
4850 class_loader::impl::getLoadedLibraryVectorMutex ();
4951 class_loader::impl::getPluginBaseToFactoryMapMapMutex ();
5052 class_loader::impl::getGlobalPluginBaseToFactoryMapMap ();
@@ -60,15 +62,14 @@ class ClassLoaderPtrVectorImpl : public ClassLoaderDependency
6062{
6163public:
6264 ClassLoaderPtrVector class_loader_ptrs_;
63- std::recursive_mutex loader_mutex_;
65+ std::mutex loader_mutex_;
6466};
6567
6668class MultiLibraryClassLoaderImpl
6769{
6870public:
6971 bool enable_ondemand_loadunload_;
7072 LibraryToClassLoaderMap active_class_loaders_;
71- std::mutex loader_mutex_;
7273};
7374
7475ClassLoaderPtrVectorImpl & getClassLoaderPtrVectorImpl ()
@@ -124,7 +125,7 @@ bool MultiLibraryClassLoader::isLibraryAvailable(const std::string & library_nam
124125void MultiLibraryClassLoader::loadLibrary (const std::string & library_path)
125126{
126127 if (!isLibraryAvailable (library_path)) {
127- std::lock_guard<std::recursive_mutex > lock (getClassLoaderPtrVectorImpl ().loader_mutex_ );
128+ std::lock_guard<std::mutex > lock (getClassLoaderPtrVectorImpl ().loader_mutex_ );
128129 getClassLoaderPtrVectorImpl ().class_loader_ptrs_ .emplace_back (
129130 std::make_shared<class_loader::ClassLoader>(library_path, isOnDemandLoadUnloadEnabled ())
130131 );
@@ -148,7 +149,7 @@ int MultiLibraryClassLoader::unloadLibrary(const std::string & library_path)
148149 remaining_unloads = loader->unloadLibrary ();
149150 if (remaining_unloads == 0 ) {
150151 impl_->active_class_loaders_ [library_path] = nullptr ;
151- std::lock_guard<std::recursive_mutex > lock (getClassLoaderPtrVectorImpl ().loader_mutex_ );
152+ std::lock_guard<std::mutex > lock (getClassLoaderPtrVectorImpl ().loader_mutex_ );
152153 auto & class_loader_ptrs = getClassLoaderPtrVectorImpl ().class_loader_ptrs_ ;
153154 for (auto iter = class_loader_ptrs.begin (); iter != class_loader_ptrs.end (); ++iter) {
154155 if (iter->get () == loader) {
0 commit comments