summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--modules/commands/os_module.cpp5
-rw-r--r--modules/protocol/bahamut.cpp7
-rw-r--r--modules/protocol/inspircd12.cpp8
-rw-r--r--modules/protocol/inspircd20.cpp7
-rw-r--r--modules/protocol/plexus.cpp7
-rw-r--r--modules/protocol/ratbox.cpp8
-rw-r--r--modules/protocol/unreal.cpp8
-rw-r--r--src/init.cpp6
-rw-r--r--src/main.cpp7
9 files changed, 55 insertions, 8 deletions
diff --git a/modules/commands/os_module.cpp b/modules/commands/os_module.cpp
index 562e130aa..750a29bfa 100644
--- a/modules/commands/os_module.cpp
+++ b/modules/commands/os_module.cpp
@@ -111,7 +111,10 @@ class CommandOSModReLoad : public Command
else
{
if (fatal)
- throw FatalException("Unable to reload module " + mname);
+ {
+ quitmsg = "Unable to reload module " + mname;
+ quitting = true;
+ }
else
source.Reply(_("Unable to load module \002%s\002"), mname.c_str());
}
diff --git a/modules/protocol/bahamut.cpp b/modules/protocol/bahamut.cpp
index 880d10a3a..796e021e1 100644
--- a/modules/protocol/bahamut.cpp
+++ b/modules/protocol/bahamut.cpp
@@ -572,6 +572,13 @@ class ProtoBahamut : public Module
ModuleManager::Attach(I_OnUserNickChange, this);
}
+ ~ProtoBahamut()
+ {
+ pmodule_ircd_var(NULL);
+ pmodule_ircd_proto(NULL);
+ pmodule_ircd_message(NULL);
+ }
+
void OnUserNickChange(User *u, const Anope::string &)
{
u->RemoveModeInternal(ModeManager::FindUserModeByName(UMODE_REGISTERED));
diff --git a/modules/protocol/inspircd12.cpp b/modules/protocol/inspircd12.cpp
index c0c4a0bde..a2e0e0920 100644
--- a/modules/protocol/inspircd12.cpp
+++ b/modules/protocol/inspircd12.cpp
@@ -758,6 +758,14 @@ class ProtoInspIRCd : public Module
ModuleManager::Attach(i, this, sizeof(i) / sizeof(Implementation));
}
+ ~ProtoInspIRCd()
+ {
+ pmodule_ircd_var(NULL);
+ pmodule_ircd_proto(NULL);
+ pmodule_ircd_message(NULL);
+ }
+
+
void OnUserNickChange(User *u, const Anope::string &)
{
/* InspIRCd 1.2 doesn't set -r on nick change, remove -r here. Note that if we have to set +r later
diff --git a/modules/protocol/inspircd20.cpp b/modules/protocol/inspircd20.cpp
index 0edcc94a7..f210525c5 100644
--- a/modules/protocol/inspircd20.cpp
+++ b/modules/protocol/inspircd20.cpp
@@ -754,6 +754,13 @@ class ProtoInspIRCd : public Module
ModuleManager::Attach(i, this, sizeof(i) / sizeof(Implementation));
}
+ ~ProtoInspIRCd()
+ {
+ pmodule_ircd_var(NULL);
+ pmodule_ircd_proto(NULL);
+ pmodule_ircd_message(NULL);
+ }
+
void OnUserNickChange(User *u, const Anope::string &)
{
u->RemoveModeInternal(ModeManager::FindUserModeByName(UMODE_REGISTERED));
diff --git a/modules/protocol/plexus.cpp b/modules/protocol/plexus.cpp
index 9947d02ab..fd6379fc9 100644
--- a/modules/protocol/plexus.cpp
+++ b/modules/protocol/plexus.cpp
@@ -658,6 +658,13 @@ class ProtoPlexus : public Module
ModuleManager::Attach(i, this, sizeof(i) / sizeof(Implementation));
}
+ ~ProtoPlexus()
+ {
+ pmodule_ircd_var(NULL);
+ pmodule_ircd_proto(NULL);
+ pmodule_ircd_message(NULL);
+ }
+
void OnServerSync(Server *s)
{
if (nickserv)
diff --git a/modules/protocol/ratbox.cpp b/modules/protocol/ratbox.cpp
index 516452ce5..c47189736 100644
--- a/modules/protocol/ratbox.cpp
+++ b/modules/protocol/ratbox.cpp
@@ -598,6 +598,14 @@ class ProtoRatbox : public Module
ModuleManager::Attach(i, this, sizeof(i) / sizeof(Implementation));
}
+ ~ProtoRatbox()
+ {
+ pmodule_ircd_var(NULL);
+ pmodule_ircd_proto(NULL);
+ pmodule_ircd_message(NULL);
+ }
+
+
void OnServerSync(Server *s)
{
if (nickserv)
diff --git a/modules/protocol/unreal.cpp b/modules/protocol/unreal.cpp
index 902309267..38b9da82b 100644
--- a/modules/protocol/unreal.cpp
+++ b/modules/protocol/unreal.cpp
@@ -1138,6 +1138,14 @@ class ProtoUnreal : public Module
ModuleManager::Attach(I_OnUserNickChange, this);
}
+ ~ProtoUnreal()
+ {
+ pmodule_ircd_var(NULL);
+ pmodule_ircd_proto(NULL);
+ pmodule_ircd_message(NULL);
+ }
+
+
void OnUserNickChange(User *u, const Anope::string &)
{
u->RemoveModeInternal(ModeManager::FindUserModeByName(UMODE_REGISTERED));
diff --git a/src/init.cpp b/src/init.cpp
index 49d9759a8..4cff3fc91 100644
--- a/src/init.cpp
+++ b/src/init.cpp
@@ -21,7 +21,11 @@ void introduce_user(const Anope::string &user)
time_t now = Anope::CurTime;
static time_t lasttime = now - 4;
if (lasttime >= now - 3)
- throw FatalException("introduce_user loop detected");
+ {
+ quitmsg = "introduce_user loop detected";
+ quitting = true;
+ return;
+ }
lasttime = now;
User *u = finduser(user);
diff --git a/src/main.cpp b/src/main.cpp
index 875e4eeb6..3730c60ea 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -68,9 +68,6 @@ time_t Anope::CurTime = time(NULL);
/******** Local variables! ********/
-/* Set to 1 after we've set everything up */
-static bool started = false;
-
/*************************************************************************/
class UpdateTimer : public Timer
@@ -118,7 +115,7 @@ class UplinkSocket : public ConnectionSocket
~UplinkSocket()
{
- if (Me && !Me->GetLinks().empty() && Me->GetLinks()[0]->IsSynced())
+ if (ircdproto && Me && !Me->GetLinks().empty() && Me->GetLinks()[0]->IsSynced())
{
FOREACH_MOD(I_OnServerDisconnect, OnServerDisconnect());
@@ -354,8 +351,6 @@ int main(int ac, char **av, char **envp)
return_code = -1;
}
- started = true;
-
/* Set up timers */
time_t last_check = Anope::CurTime;
UpdateTimer updateTimer(Config->UpdateTimeout);