summaryrefslogtreecommitdiff
path: root/src/modules.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules.cpp')
-rw-r--r--src/modules.cpp23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/modules.cpp b/src/modules.cpp
index bf5506d68..a111eaa92 100644
--- a/src/modules.cpp
+++ b/src/modules.cpp
@@ -395,6 +395,29 @@ void ModuleManager::DoSafeUnload(Module* mod)
ServerInstance->BuildISupport();
}
+void ModuleManager::UnloadAll()
+{
+ /* We do this more than once, so that any service providers get a
+ * chance to be unhooked by the modules using them, but then get
+ * a chance to be removed themsleves.
+ *
+ * Note: this deliberately does NOT delete the DLLManager objects
+ */
+ for (int tries = 0; tries < 4; tries++)
+ {
+ std::map<std::string, Module*>::iterator i = Modules.begin();
+ while (i != Modules.end())
+ {
+ std::map<std::string, Module*>::iterator me = i++;
+ if (CanUnload(me->second))
+ {
+ DoSafeUnload(me->second);
+ }
+ }
+ ServerInstance->GlobalCulls.Apply();
+ }
+}
+
std::string& ModuleManager::LastError()
{
return LastModuleError;