@@ -44,7 +44,8 @@ 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 defined in a static instance in the `getClassLoaderPtrVectorImpl`
4849 class_loader::impl::getLoadedLibraryVectorMutex ();
4950 class_loader::impl::getPluginBaseToFactoryMapMapMutex ();
5051 class_loader::impl::getGlobalPluginBaseToFactoryMapMap ();
@@ -60,15 +61,14 @@ class ClassLoaderPtrVectorImpl : public ClassLoaderDependency
6061{
6162public:
6263 ClassLoaderPtrVector class_loader_ptrs_;
63- std::recursive_mutex loader_mutex_;
64+ std::mutex loader_mutex_;
6465};
6566
6667class MultiLibraryClassLoaderImpl
6768{
6869public:
6970 bool enable_ondemand_loadunload_;
7071 LibraryToClassLoaderMap active_class_loaders_;
71- std::mutex loader_mutex_;
7272};
7373
7474ClassLoaderPtrVectorImpl & getClassLoaderPtrVectorImpl ()
@@ -124,7 +124,7 @@ bool MultiLibraryClassLoader::isLibraryAvailable(const std::string & library_nam
124124void MultiLibraryClassLoader::loadLibrary (const std::string & library_path)
125125{
126126 if (!isLibraryAvailable (library_path)) {
127- std::lock_guard<std::recursive_mutex > lock (getClassLoaderPtrVectorImpl ().loader_mutex_ );
127+ std::lock_guard<std::mutex > lock (getClassLoaderPtrVectorImpl ().loader_mutex_ );
128128 getClassLoaderPtrVectorImpl ().class_loader_ptrs_ .emplace_back (
129129 std::make_shared<class_loader::ClassLoader>(library_path, isOnDemandLoadUnloadEnabled ())
130130 );
@@ -148,7 +148,7 @@ int MultiLibraryClassLoader::unloadLibrary(const std::string & library_path)
148148 remaining_unloads = loader->unloadLibrary ();
149149 if (remaining_unloads == 0 ) {
150150 impl_->active_class_loaders_ [library_path] = nullptr ;
151- std::lock_guard<std::recursive_mutex > lock (getClassLoaderPtrVectorImpl ().loader_mutex_ );
151+ std::lock_guard<std::mutex > lock (getClassLoaderPtrVectorImpl ().loader_mutex_ );
152152 auto & class_loader_ptrs = getClassLoaderPtrVectorImpl ().class_loader_ptrs_ ;
153153 for (auto iter = class_loader_ptrs.begin (); iter != class_loader_ptrs.end (); ++iter) {
154154 if (iter->get () == loader) {
0 commit comments