diff options
-rwxr-xr-x | include/module/ModuleLoader.hpp | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/include/module/ModuleLoader.hpp b/include/module/ModuleLoader.hpp index b1fbbb6..b0cddd6 100755 --- a/include/module/ModuleLoader.hpp +++ b/include/module/ModuleLoader.hpp @@ -56,13 +56,16 @@ const int CLOSE_DEFERRED = 1; const int DEFAULT_FLAGS = CLOSE_ON_DTOR; static void deferredClose( void ) -{ - for( size_t i = 0; i <= nofDeferredModules - 1; i++ ) { +{ + for( size_t i = 0; i < nofDeferredModules; i++ ) { + if( deferredModules[i] ) { #ifndef _WIN32 - dlclose( deferredModules[i] ); + dlclose( deferredModules[i] ); #else - (void)FreeLibrary( deferredModules[i] ); + (void)FreeLibrary( deferredModules[i] ); #endif + deferredModules[i] = 0; + } } free( deferredModules ); } @@ -134,6 +137,8 @@ class BaseModuleLoader { // of derived classes to be called, This should be changed.. // So we inspect only the being of the module list here. typename mapType::iterator it = m_modules.begin( ); + if( it == m_modules.end( ) ) return; + if( (*it).second.registry ) { if( (*it).second.registry->destroyModule != 0 ) { (*it).second.registry->destroyModule( (*it).second.user_data ); |