From ae6acab1ba3ddc144c599d5434bbcf6f1efa37ad Mon Sep 17 00:00:00 2001 From: danieldg Date: Wed, 2 Sep 2009 00:46:36 +0000 Subject: Valgrind cleanup: deallocate RFC modes, clientlist, and uuidlist git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@11614 e03df62e-2008-0410-955e-edbf42e46eb7 --- src/mode.cpp | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) (limited to 'src/mode.cpp') diff --git a/src/mode.cpp b/src/mode.cpp index 1986ed2bb..cbd58021c 100644 --- a/src/mode.cpp +++ b/src/mode.cpp @@ -1086,19 +1086,22 @@ ModeParser::ModeParser(InspIRCd* Instance) : ServerInstance(Instance) new ModeChannelPrivate(Instance), new ModeChannelModerated(Instance), new ModeChannelTopicOps(Instance), + new ModeChannelNoExternal(Instance), new ModeChannelInviteOnly(Instance), new ModeChannelKey(Instance), new ModeChannelLimit(Instance), + new ModeChannelBan(Instance), new ModeChannelOp(Instance), new ModeChannelHalfOp(Instance), new ModeChannelVoice(Instance), + new ModeUserWallops(Instance), new ModeUserInvisible(Instance), new ModeUserOperator(Instance), new ModeUserServerNoticeMask(Instance), - NULL +#define BUILTIN_MODE_COUNT 16 }; /* Clear mode handler list */ @@ -1108,9 +1111,25 @@ ModeParser::ModeParser(InspIRCd* Instance) : ServerInstance(Instance) LastParse.clear(); /* Initialise the RFC mode letters */ - for (int index = 0; modes[index]; index++) + for (int index = 0; index < BUILTIN_MODE_COUNT; index++) this->AddMode(modes[index]); seq = 0; memset(&sent, 0, sizeof(sent)); } + +ModeParser::~ModeParser() +{ + int count = 0; + for(int i=0; i < 256; i++) + { + ModeHandler* mh = modehandlers[i]; + if (mh) + { + count++; + delete mh; + } + } + if (count != BUILTIN_MODE_COUNT) + throw CoreException("Mode handler found non-core modes remaining at deallocation"); +} -- cgit v1.2.3