Clean up crash on destruction of statics at exit

git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@11877 e03df62e-2008-0410-955e-edbf42e46eb7
This commit is contained in:
danieldg 2009-10-16 15:43:53 +00:00
parent 04e097e207
commit 7c55dfc788
5 changed files with 10 additions and 17 deletions

View File

@ -57,7 +57,8 @@ ModeHandler::ModeHandler(Module* Creator, const std::string& Name, char modelett
ModeHandler::~ModeHandler()
{
ServerInstance->Modes->DelMode(this);
if (ServerInstance)
ServerInstance->Modes->DelMode(this);
}
bool ModeHandler::IsListMode()

View File

@ -44,7 +44,6 @@ public:
{
if (!ServerInstance->Modes->AddMode(&be))
throw ModuleException("Could not add new modes!");
ServerInstance->Modules->PublishInterface("ChannelBanList", this);
be.DoImplements(this);
Implementation list[] = { I_OnRehash, I_On005Numeric, I_OnExtBanCheck, I_OnCheckChannelBan };
@ -123,12 +122,7 @@ public:
Version GetVersion()
{
return Version("Provides support for the +e channel mode", VF_COMMON | VF_VENDOR, API_VERSION);
}
~ModuleBanException()
{
ServerInstance->Modules->UnpublishInterface("ChannelBanList", this);
return Version("Provides support for the +e channel mode", VF_COMMON | VF_VENDOR);
}
};

View File

@ -43,7 +43,6 @@ public:
{
if (!ServerInstance->Modes->AddMode(&ie))
throw ModuleException("Could not add new modes!");
ServerInstance->Modules->PublishInterface("ChannelBanList", this);
ie.DoImplements(this);
Implementation eventlist[] = { I_On005Numeric, I_OnCheckInvite };
@ -62,7 +61,6 @@ public:
modelist* list = ie.extItem.get(chan);
if (list)
{
std::string mask = std::string(user->nick) + "!" + user->ident + "@" + user->GetIPString();
for (modelist::iterator it = list->begin(); it != list->end(); it++)
{
if (chan->CheckBan(user, it->mask))
@ -71,7 +69,6 @@ public:
}
}
}
// or if there wasn't a list, there can't be anyone on it, so we don't need to do anything.
}
return MOD_RES_PASSTHRU;
@ -94,12 +91,7 @@ public:
Version GetVersion()
{
return Version("Provides support for the +I channel mode", VF_VENDOR | VF_COMMON, API_VERSION);
}
~ModuleInviteException()
{
ServerInstance->Modules->UnpublishInterface("ChannelBanList", this);
return Version("Provides support for the +I channel mode", VF_VENDOR | VF_COMMON);
}
};

View File

@ -27,6 +27,11 @@ class ModuleNamedModes : public Module
return Version("Provides the ability to manipulate modes via long names.",VF_VENDOR);
}
void Prioritize()
{
ServerInstance->Modules->SetPriority(this, I_OnPreMode, PRIORITY_FIRST);
}
void On005Numeric(std::string& line)
{
std::string::size_type pos = line.find(" CHANMODES=");

View File

@ -44,6 +44,7 @@ void InspIRCd::Exit(int status)
this->SendError("Exiting with status " + ConvToStr(status) + " (" + std::string(ExitCodes[status]) + ")");
this->Cleanup();
delete this;
ServerInstance = NULL;
}
exit (status);
}