summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2011-04-27 10:56:20 -0400
committerAdam <Adam@anope.org>2011-05-16 04:09:07 -0400
commit284af258bf3c4dc7f409722d66bb0ac59e01e37d (patch)
tree5649a27a7a247c2609a4ef13b52a357765cbdfcc /src
parente7887c1f013248274574ab8e3167f742ccb3d69b (diff)
Added more useful functions to our LDAP API, allow adding newly registered accounts to LDAP, removed some unnecessary OnPre events and fixed unloading all modules
Diffstat (limited to 'src')
-rw-r--r--src/main.cpp25
-rw-r--r--src/modulemanager.cpp13
2 files changed, 16 insertions, 22 deletions
diff --git a/src/main.cpp b/src/main.cpp
index 7ec3cfe0e..380240dbb 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -133,10 +133,12 @@ void do_restart_services()
}
Log() << "Restarting";
- FOREACH_MOD(I_OnPreRestart, OnPreRestart());
-
if (quitmsg.empty())
quitmsg = "Restarting";
+
+ FOREACH_MOD(I_OnRestart, OnRestart());
+ ModuleManager::UnloadAll();
+
/* Send a quit for all of our bots */
for (Anope::insensitive_map<BotInfo *>::const_iterator it = BotListByNick.begin(), it_end = BotListByNick.end(); it != it_end; ++it)
{
@@ -150,9 +152,6 @@ void do_restart_services()
UserListByUID.erase(bi->GetUID());
}
- FOREACH_MOD(I_OnRestart, OnRestart());
-
- ModuleManager::UnloadAll();
ircdproto->SendSquit(Config->ServerName, quitmsg);
delete UplinkSock;
SocketEngine::Shutdown();
@@ -174,11 +173,13 @@ void do_restart_services()
static void services_shutdown()
{
- FOREACH_MOD(I_OnPreShutdown, OnPreShutdown());
-
if (quitmsg.empty())
quitmsg = "Terminating, reason unknown";
Log() << quitmsg;
+
+ FOREACH_MOD(I_OnShutdown, OnShutdown());
+ ModuleManager::UnloadAll();
+
if (started && UplinkSock)
{
/* Send a quit for all of our bots */
@@ -203,9 +204,6 @@ static void services_shutdown()
delete u;
}
}
- FOREACH_MOD(I_OnShutdown, OnShutdown());
- ModuleManager::UnloadAll();
- ircdproto->SendSquit(Config->ServerName, quitmsg);
delete UplinkSock;
SocketEngine::Shutdown();
@@ -225,7 +223,6 @@ void sighandler(int signum)
#else
quitmsg = Anope::string("Services terminating via signal ") + stringify(signum);
#endif
- bool fatal = false;
if (started)
{
@@ -267,17 +264,13 @@ void sighandler(int signum)
#endif
save_databases();
- services_shutdown();
+ quitting = true;
default:
- fatal = true;
break;
}
}
FOREACH_MOD(I_OnSignal, OnSignal(signum, quitmsg));
-
- if (fatal)
- throw FatalException(quitmsg);
}
/*************************************************************************/
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