diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/main.cpp | 8 | ||||
-rw-r--r-- | src/modulemanager.cpp | 14 |
2 files changed, 10 insertions, 12 deletions
diff --git a/src/main.cpp b/src/main.cpp index 8132e9d1c..df7c61c63 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -189,9 +189,7 @@ void do_restart_services() SocketEngine->Process(); delete UplinkSock; close_log(); - /* First don't unload protocol module, then do so */ - ModuleManager::UnloadAll(false); - ModuleManager::UnloadAll(true); + ModuleManager::UnloadAll(); chdir(binary_dir.c_str()); execve(services_bin.c_str(), my_av, my_envp); if (!readonly) @@ -238,9 +236,7 @@ static void services_shutdown() SocketEngine->Process(); delete UplinkSock; FOREACH_MOD(I_OnShutdown, OnShutdown()); - /* First don't unload protocol module, then do so */ - ModuleManager::UnloadAll(false); - ModuleManager::UnloadAll(true); + ModuleManager::UnloadAll(); /* just in case they weren't all removed at least run once */ ModuleRunTimeDirCleanUp(); } diff --git a/src/modulemanager.cpp b/src/modulemanager.cpp index b5f0d51f2..f539f273d 100644 --- a/src/modulemanager.cpp +++ b/src/modulemanager.cpp @@ -419,16 +419,18 @@ void ModuleManager::ClearCallBacks(Module *m) /** Unloading all modules, NEVER call this when Anope isn't shutting down. * Ever. - * @param unload_proto true to unload the protocol module */ -void ModuleManager::UnloadAll(bool unload_proto) +void ModuleManager::UnloadAll() { - for (std::list<Module *>::iterator it = Modules.begin(), it_end = Modules.end(); it != it_end; ) + for (size_t i = MT_BEGIN + 1; i != MT_END; ++i) { - Module *m = *it++; + for (std::list<Module *>::iterator it = Modules.begin(), it_end = Modules.end(); it != it_end; ) + { + Module *m = *it++; - if (unload_proto || m->type != PROTOCOL) - DeleteModule(m); + if (static_cast<MODType>(i) == m->type) + DeleteModule(m); + } } } |