summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main.cpp8
-rw-r--r--src/modulemanager.cpp14
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);
+ }
}
}