summaryrefslogtreecommitdiff
path: root/src/modulemanager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/modulemanager.cpp')
-rw-r--r--src/modulemanager.cpp13
1 files changed, 7 insertions, 6 deletions
diff --git a/src/modulemanager.cpp b/src/modulemanager.cpp
index d9d105953..ac6316728 100644
--- a/src/modulemanager.cpp
+++ b/src/modulemanager.cpp
@@ -472,16 +472,17 @@ void ModuleManager::ClearCallBacks(Module *m)
*/
void ModuleManager::UnloadAll()
{
+ std::vector<Anope::string> modules[MT_END];
+ for (std::list<Module *>::iterator it = Modules.begin(), it_end = Modules.end(); it != it_end; ++it)
+ modules[(*it)->type].push_back((*it)->name);
+
for (size_t i = MT_BEGIN + 1; i != MT_END; ++i)
- {
- for (std::list<Module *>::iterator it = Modules.begin(), it_end = Modules.end(); it != it_end; )
+ for (unsigned j = 0; j < modules[i].size(); ++j)
{
- Module *m = *it++;
-
- if (static_cast<MODType>(i) == m->type)
+ Module *m = FindModule(modules[i][j]);
+ if (m != NULL)
UnloadModule(m, NULL);
}
- }
}
/** Register a service