*/
#define IS_SINGLE(x,y) ( (*x == y) && (*(x+1) == 0) )
+#define DELETE(x) { log(DEBUG,__FILE__" ("__LINE__"): delete()"); delete x; }
+
template<typename T> inline std::string ConvToStr(const T &in)
{
std::stringstream tmp;
if (n != chanlist.end())
{
Ptr->DelUser(user);
- delete Ptr;
+ DELETE(Ptr);
chanlist.erase(n);
for (unsigned int index =0; index < user->chans.size(); index++)
{
{
log(DEBUG,"del_channel: destroyed: %s",Ptr->name);
FOREACH_MOD(I_OnChannelDelete,OnChannelDelete(Ptr));
- delete Ptr;
+ DELETE(Ptr);
chanlist.erase(iter);
}
}
if (iter != chanlist.end())
{
log(DEBUG,"del_channel: destroyed: %s",Ptr->name);
- FOREACH_MOD(I_OnChannelDelete,OnChannelDelete(Ptr));
- delete Ptr;
+ FOREACH_MOD(I_OnChannelDelete,OnChannelDelete(Ptr));
+ DELETE(Ptr);
chanlist.erase(iter);
}
}
{
log(DEBUG,"del_channel: destroyed: %s",Ptr->name);
FOREACH_MOD(I_OnChannelDelete,OnChannelDelete(Ptr));
- delete Ptr;
+ DELETE(Ptr);
chanlist.erase(iter);
}
}
purge_empty_chans(u);
}
- delete u;
+ DELETE(u);
}
else
{
}
if (user->fd > -1)
fd_ref_table[user->fd] = NULL;
- delete user;
+ DELETE(user);
}
}
if (s->fd == -1)
{
- delete s;
+ DELETE(s);
return NULL;
}
/* create new connection object, add to linked list */
ip = new in_addr;
if(dns_aton4_s(ipstring,ip) == NULL)
{
- delete ip;
+ DELETE(ip);
return NULL;
}
return ip;
dns_close(c->fd);
if (l < 12)
{
- delete c;
+ DELETE(c);
return NULL;
}
dns_fill_header(&h,buffer,l - 12);
if (c->id[0] != h.id[0] || c->id[1] != h.id[1])
{
log(DEBUG,"DNS: id mismatch on query");
- delete c;
+ DELETE(c);
return NULL; /* ID mismatch */
}
if ((h.flags1 & FLAGS1_MASK_QR) == 0)
{
log(DEBUG,"DNS: didnt get a query result");
- delete c;
+ DELETE(c);
return NULL;
}
if ((h.flags1 & FLAGS1_MASK_OPCODE) != 0)
{
log(DEBUG,"DNS: got an OPCODE and didnt want one");
- delete c;
+ DELETE(c);
return NULL;
}
if ((h.flags2 & FLAGS2_MASK_RCODE) != 0)
{
log(DEBUG,"DNS lookup failed due to SERVFAIL");
- delete c;
+ DELETE(c);
return NULL;
}
if (h.ancount < 1)
{
log(DEBUG,"DNS: no answers!");
- delete c;
+ DELETE(c);
return NULL;
}
i = 0;
}
if (l - i < 10)
{
- delete c;
+ DELETE(c);
return NULL;
}
dns_fill_rr(&rr,&h.payload[i]);
break;
if (rr.rdlength != 4)
{
- delete c;
+ DELETE(c);
return NULL;
}
memcpy(&alist->ip,&h.payload[i],4);
}
if (l - i < 10)
{
- delete c;
+ DELETE(c);
return NULL;
}
dns_fill_rr(&rr,&h.payload[i]);
res[rr.rdlength] = '\0';
break;
}
- delete c;
+ DELETE(c);
return res;
}
* from the socket engine, as dns.cpp tracks it
* for us if we are in single-threaded country.
*/
- delete x;
+ DELETE(x);
}
}
else
/* its fd is dodgy, the dns code probably
* bashed it due to error. Free the class.
*/
- delete x;
+ DELETE(x);
}
/* If we got down here, the dns lookup was valid, BUT,
* its still in progress. Be patient, and wait for
if (i2 != chanlist.end())
{
FOREACH_MOD(I_OnChannelDelete,OnChannelDelete(i2->second));
- delete i2->second;
+ DELETE(i2->second);
chanlist.erase(i2);
}
}
{
if (v1 == j)
{
- delete *m;
+ DELETE(*m);
modules.erase(m);
modules.push_back(NULL);
break;
}
}
s->Close();
- delete s;
+ DELETE(s);
}
else if (!s)
{
{
ServerInstance = new InspIRCd(argc, argv);
ServerInstance->Run();
- delete ServerInstance;
+ DELETE(ServerInstance);
}
catch (std::bad_alloc)
{
log(DEBUG,"No module claims umode %c",umode);
if (faked)
{
- delete s2;
+ DELETE(s2);
source = NULL;
}
return false;
{
if (faked)
{
- delete s2;
+ DELETE(s2);
source = NULL;
}
return false;
//~ if (this->cache)
//~ delete this->cache;
if (this->errorlog)
- delete this->errorlog;
+ DELETE(this->errorlog);
if(this->privatehash)
- delete this->data;
+ DELETE(this->data);
}
virtual ~ModuleFilterPCRE()
{
- delete MyConf;
- delete Conf;
+ DELETE(MyConf);
+ DELETE(Conf);
}
void Implements(char* List)
{
// reload our config file on rehash - we must destroy and re-allocate the classes
// to call the constructor again and re-read our data.
- delete Conf;
- delete MyConf;
+ DELETE(Conf);
+ DELETE(MyConf);
Conf = new ConfigReader;
std::string filterfile = Conf->ReadValue("filter","file",0);
// this automatically re-reads the configuration file into the class
virtual ~ModuleSQL()
{
Connections.clear();
- delete Conf;
+ DELETE(Conf);
}
virtual void OnRehash(const std::string ¶meter)
{
- delete Conf;
+ DELETE(Conf);
Conf = new ConfigReader();
LoadDatabases(Conf);
}
{
encryption.append("(");
}
- delete Conf;
+ DELETE(Conf);
SQLModule = Srv->FindModule("m_sql.so");
if (!SQLModule)
Srv->Log(DEFAULT,"WARNING: m_sqlauth.so could not initialize because m_sql.so is not loaded. Load the module and rehash your server.");
found = false;
}
- delete rowrequest;
- delete rowresult;
+ DELETE(rowrequest);
+ DELETE(rowresult);
}
else
{
Request donerequest((char*)query, this, SQLModule);
donerequest.Send();
- delete query;
- delete result;
+ DELETE(query);
+ DELETE(result);
return found;
}
{
Conf = new ConfigReader();
dbid = Conf->ReadInteger("sqllog","dbid",0,true); // database id of a database configured in m_sql (see m_sql config)
- delete Conf;
+ DELETE(Conf);
SQLModule = Srv->FindModule("m_sql.so");
if (!SQLModule)
Srv->Log(DEFAULT,"WARNING: m_SQLLog.so could not initialize because m_sql.so is not loaded. Load the module and rehash your server.");
if (rowresult->GetType() == SQL_ROW)
{
nid = atoi(rowresult->GetField("id").c_str());
- delete rowresult;
+ DELETE(rowresult);
}
- delete rowrequest;
- delete result;
+ DELETE(rowrequest);
+ DELETE(result);
}
query->SetQueryType(SQL_DONE);
query->SetConnID(dbid);
Request donerequest((char*)query, this, SQLModule);
donerequest.Send();
- delete query;
+ DELETE(query);
if (nid < 1)
{
}
if (result2)
- delete result;
+ DELETE(result);
if (query2)
- delete query2;
+ DELETE(query2);
nid = InsertNick(nick);
}
}
if (result)
- delete result;
+ DELETE(result);
if (query)
- delete query;
+ DELETE(query);
return;
}
if (rowresult->GetType() == SQL_ROW)
{
hid = atoi(rowresult->GetField("id").c_str());
- delete rowresult;
+ DELETE(rowresult);
}
- delete rowrequest;
- delete result;
+ DELETE(rowrequest);
+ DELETE(result);
}
query->SetQueryType(SQL_DONE);
query->SetConnID(dbid);
Request donerequest((char*)query, this, SQLModule);
donerequest.Send();
- delete query;
+ DELETE(query);
if (hid < 1)
{
}
if (result)
- delete result2;
+ DELETE(result2);
if (query)
- delete query2;
+ DELETE(query2);
hid = InsertHost(host);
}
virtual void OnRehash(const std::string ¶meter)
{
- delete Conf;
+ DELETE(Conf);
Conf = new ConfigReader();
ReadConfig();
}
}
}
- delete rowresult;
+ DELETE(rowresult);
}
else
{
found = false;
}
- delete rowrequest;
- delete result;
+ DELETE(rowrequest);
+ DELETE(result);
}
else
{
query->SetConnID(dbid);
Request donerequest((char*)query, this, SQLModule);
donerequest.Send();
- delete query;
+ DELETE(query);
return found;
}
virtual ~ModuleSQLOper()
{
- delete Conf;
+ DELETE(Conf);
}
virtual Version GetVersion()
// This may be on a large (once a day or week) timer eventually.
GenerateDHParams();
- delete Conf;
+ DELETE(Conf);
}
void GenerateDHParams()
metadata->push_back("ON"); // The value to send
Event* event = new Event((char*)metadata,(Module*)this,"send_metadata");
event->Send(); // Trigger the event. We don't care what module picks it up.
- delete event;
- delete metadata;
+ DELETE(event);
+ DELETE(metadata);
}
}
log(DEFAULT, "m_ssl_openssl.so: Couldn't set DH parameters");
}
- delete Conf;
+ DELETE(Conf);
}
virtual ~ModuleSSLOpenSSL()
metadata->push_back("ON"); // The value to send
Event* event = new Event((char*)metadata,(Module*)this,"send_metadata");
event->Send(); // Trigger the event. We don't care what module picks it up.
- delete event;
- delete metadata;
+ DELETE(event);
+ DELETE(metadata);
}
}
virtual ~ModuleAlias()
{
- delete MyConf;
+ DELETE(MyConf);
}
virtual Version GetVersion()
virtual void OnRehash(const std::string ¶meter)
{
- delete MyConf;
+ DELETE(MyConf);
MyConf = new ConfigReader;
ReadAliases();
else
action = IBLOCK_KILLOPERS;
- delete Conf;
+ DELETE(Conf);
}
virtual int OnPreCommand(const std::string &command, char **parameters, int pcnt, userrec *user, bool validated)
BlockedMessage* m = (BlockedMessage*)user->GetExt("amsgblock");
if(m)
{
- delete m;
+ DELETE(m);
user->Shrink("amsgblock");
}
}
irc::string replace = (MyConf->ReadValue("badword","replace",index)).c_str();
censors[pattern] = replace;
}
- delete Conf;
- delete MyConf;
+ DELETE(Conf);
+ DELETE(MyConf);
}
virtual Version GetVersion()
if (spamlist)
{
channel->Shrink("spam_list");
- delete spamlist;
+ DELETE(spamlist);
}
}
}
virtual void OnRehash(const std::string ¶meter)
{
- delete Conf;
+ DELETE(Conf);
Conf = new ConfigReader;
// re-read our config options on a rehash
MaxEntries = Conf->ReadInteger("chanfilter","maxsize",0,true);
virtual ~ModuleChanFilter()
{
- delete Conf;
+ DELETE(Conf);
}
virtual Version GetVersion()
virtual void OnRehash(const std::string ¶meter)
{
// on a rehash we delete our classes for good measure and create them again.
- delete Conf;
+ DELETE(Conf);
Conf = new ConfigReader;
// re-read our config options on a rehash
FirstInGetsFounder = Conf->ReadFlag("options","noservices",0);
virtual ~ModuleChanProtect()
{
- delete Conf;
+ DELETE(Conf);
}
virtual Version GetVersion()
out[length] = '\0';
- delete tmp;
+ DELETE(tmp);
return (char*)out;
}
if(Conf->GetError() == CONF_VALUE_NOT_FOUND)
killonbadreply = true;
- delete Conf;
+ DELETE(Conf);
}
void Implements(char* List)
{
if(strcmp(pingrpl, parameters[0]) == 0)
{
- delete pingrpl;
+ DELETE(pingrpl);
user->Shrink("waitpong_pingstr");
return 1;
}
if(pingrpl)
{
- delete pingrpl;
+ DELETE(pingrpl);
user->Shrink("waitpong_pingstr");
}
}
if(pingrpl)
{
- delete pingrpl;
+ DELETE(pingrpl);
user->Shrink("waitpong_pingstr");
}
}
virtual void OnRehash(const std::string ¶m)
{
- delete Conf;
+ DELETE(Conf);
Conf = new ConfigReader;
}
virtual ~ModuleDenyChannels()
{
- delete Conf;
+ DELETE(Conf);
}
virtual Version GetVersion()
}
for (filter_t::iterator n = filters.begin(); n != filters.end(); n++)
{
- delete n->second;
+ DELETE(n->second);
}
filters.clear();
for (int index = 0; index < MyConf->Enumerate("keyword"); index++)
filters[pattern] = x;
}
Srv->Log(DEFAULT,std::string("m_filter: read configuration from ")+filterfile);
- delete Conf;
- delete MyConf;
+ DELETE(Conf);
+ DELETE(MyConf);
}
virtual Version GetVersion()
virtual void OnRehash(const std::string ¶meter)
{
- delete conf;
+ DELETE(conf);
if (helpop)
- delete helpop;
+ DELETE(helpop);
ReadConfig();
}
virtual ~ModuleHelpop()
{
- delete conf;
- delete helpop;
+ DELETE(conf);
+ DELETE(helpop);
}
virtual Version GetVersion()
virtual ~ModuleHostChange()
{
- delete Conf;
+ DELETE(Conf);
}
Priority Prioritize()
virtual void OnRehash(const std::string ¶meter)
{
- delete Conf;
+ DELETE(Conf);
Conf = new ConfigReader;
MySuffix = Conf->ReadValue("host","suffix",0);
for (hostchanges_t::iterator i = hostchanges.begin(); i != hostchanges.end(); i++)
{
- delete i->second;
+ DELETE(i->second);
}
hostchanges.clear();
for (int index = 0; index < Conf->Enumerate("hostchange"); index++)
IdentTimeout = Conf->ReadInteger("ident","timeout",0,true);
if (!IdentTimeout)
IdentTimeout = 1;
- delete Conf;
+ DELETE(Conf);
}
ModuleIdent(Server* Me)
else
{
Srv->SendServ(user->fd,"NOTICE "+std::string(user->nick)+" :*** Could not find your ident, using "+std::string(user->ident)+" instead.");
- delete ident;
+ DELETE(ident);
}
}
if (c->GetExt("joinflood"))
{
joinfloodsettings *f = (joinfloodsettings*)c->GetExt("joinflood");
- delete f;
+ DELETE(f);
c->Shrink("joinflood");
}
}
if (chan->GetExt("joinflood"))
{
joinfloodsettings *f = (joinfloodsettings*)chan->GetExt("joinflood");
- delete f;
+ DELETE(f);
chan->Shrink("joinflood");
}
}
if (dl)
{
- delete dl;
+ DELETE(dl);
c->Shrink("norejoinusers");
}
}
if (!dl->size())
{
// Now it's empty..
- delete dl;
- chan->Shrink("norejoinusers");
+ DELETE(dl);
+ chan->Shrink("norejoinusers");
+ }
}
}
+ return 0;
}
- return 0;
- }
-
- virtual void OnUserKick(userrec* source, userrec* user, chanrec* chan, const std::string &reason)
- {
- if (chan->IsModeSet('J') && (source != user))
+
+ virtual void OnUserKick(userrec* source, userrec* user, chanrec* chan, const std::string &reason)
{
- delaylist* dl = (delaylist*)chan->GetExt("norejoinusers");
-
- if (!dl)
+ if (chan->IsModeSet('J') && (source != user))
{
- dl = new delaylist;
- chan->Extend("norejoinusers", (char*)dl);
+ delaylist* dl = (delaylist*)chan->GetExt("norejoinusers");
+
+ if (!dl)
+ {
+ dl = new delaylist;
+ chan->Extend("norejoinusers", (char*)dl);
+ }
+
+ log(DEBUG, "m_kicknorejoin.so: setting record for %s, %d second delay", user->nick, strtoint(chan->GetModeParameter('J')));
+ (*dl)[user] = time(NULL) + strtoint(chan->GetModeParameter('J'));
}
-
- log(DEBUG, "m_kicknorejoin.so: setting record for %s, %d second delay", user->nick, strtoint(chan->GetModeParameter('J')));
- (*dl)[user] = time(NULL) + strtoint(chan->GetModeParameter('J'));
}
- }
-
- virtual void OnChannelDelete(chanrec* chan)
- {
- delaylist* dl = (delaylist*)chan->GetExt("norejoinusers");
- if (dl)
+ virtual void OnChannelDelete(chanrec* chan)
{
- delete dl;
+ delaylist* dl = (delaylist*)chan->GetExt("norejoinusers");
+
+ if (dl)
+ {
+ DELETE(dl);
chan->Shrink("norejoinusers");
}
}
if (c->GetExt("flood"))
{
floodsettings *f = (floodsettings*)c->GetExt("flood");
- delete f;
+ DELETE(f);
c->Shrink("flood");
}
}
if (chan->GetExt("flood"))
{
floodsettings *f = (floodsettings*)chan->GetExt("flood");
- delete f;
+ DELETE(f);
chan->Shrink("flood");
}
}
virtual void OnRehash(const std::string ¶meter)
{
- delete conf;
+ DELETE(conf);
conf = new ConfigReader;
}
virtual ~ModuleOperjoin()
{
- delete conf;
+ DELETE(conf);
}
virtual Version GetVersion()
virtual ~ModuleOperLevels()
{
- delete conf;
+ DELETE(conf);
}
void Implements(char* List)
virtual void OnRehash(const std::string ¶meter)
{
- delete conf;
+ DELETE(conf);
conf = new ConfigReader;
}
virtual void OnRehash(const std::string ¶meter)
{
- delete Conf;
+ DELETE(Conf);
Conf = new ConfigReader;
}
virtual ~ModuleModesOnOper()
{
- delete Conf;
+ DELETE(Conf);
}
virtual Version GetVersion()
filename = conf->ReadValue("opermotd","file",0);
opermotd->LoadFile(filename);
- delete conf;
+ DELETE(conf);
}
void ShowOperMOTD(userrec* user)
overrides[typen] = tokenlist;
}
- delete Conf;
+ DELETE(Conf);
}
void Implements(char* List)
timebuf[strlen(timebuf)-1] = '\0';
WriteServ(unpark->fd,"NOTICE %s :From %s at %s: \2%s\2",unpark->nick,i->from.c_str(),timebuf,i->text.c_str());
}
- delete awy;
+ DELETE(awy);
unpark->Shrink("park_awaylog");
unpark->Shrink("park_key");
for (parkinfo::iterator j = pinfo.begin(); j != pinfo.end(); j++)
ParkMaxTime = Conf->ReadInteger("park","maxtime",0,true);
ConcurrentParks = Conf->ReadInteger("park","maxperip",0,true);
ParkMaxMsgs = Conf->ReadInteger("park","maxmessages",0,true);
- delete Conf;
+ DELETE(Conf);
}
ModulePark(Server* Me)
virtual ~ModuleRandQuote()
{
- delete conf;
- delete quotes;
+ DELETE(conf);
+ DELETE(quotes);
}
virtual Version GetVersion()
irc::string channel = txt.c_str();
allowchans[channel] = 1;
}
- delete MyConf;
+ DELETE(MyConf);
}
public:
if (ld->list_position > Srv->GetChannelCount())
{
u->Shrink("safelist_cache");
- delete ld;
+ DELETE(ld);
listusers.erase(iter);
go_again = true;
break;
return 1;
}
- delete last_list_time;
+ DELETE(last_list_time);
user->Shrink("safelist_last");
}
if (ld)
{
u->Shrink("safelist_cache");
- delete ld;
+ DELETE(ld);
}
for (UserList::iterator iter = listusers.begin(); iter != listusers.end(); iter++)
{
time_t* last_list_time = (time_t*)u->GetExt("safelist_last");
if (last_list_time)
{
- delete last_list_time;
+ DELETE(last_list_time);
u->Shrink("safelist_last");
}
}
{
// tidy up -- if a user's list is empty, theres no use having it
// hanging around in the user record.
- delete sl;
+ DELETE(sl);
user->Shrink("silence_list");
}
}
silencelist* sl = (silencelist*)user->GetExt("silence_list");
if (sl)
{
- delete sl;
+ DELETE(sl);
user->Shrink("silence_list");
}
}
TreeServer* s = (TreeServer*)*a;
s->Tidy();
Children.erase(a);
- delete s;
+ DELETE(s);
stillchildren = true;
break;
}
~TreeSocket()
{
if (ctx_in)
- delete ctx_in;
+ DELETE(ctx_in);
if (ctx_out)
- delete ctx_out;
+ DELETE(ctx_out);
}
void InitAES(std::string key,std::string SName)
SquitServer(from, Current);
Current->Tidy();
Current->GetParent()->DelChild(Current);
- delete Current;
+ DELETE(Current);
WriteOpers("Netsplit complete, lost \002%d\002 users on \002%d\002 servers.", num_lost_users, num_lost_servers);
}
else
}
Srv->SendMode(modelist,params.size(),who);
DoOneToAllButSender(source,"FMODE",params,source);
- delete who;
+ DELETE(who);
return true;
}
{
log(DEFAULT,"m_spanningtree: Warning: Failed to bind server port %d",Port);
listener->Close();
- delete listener;
+ DELETE(listener);
}
}
}
}
}
}
- delete Conf;
+ DELETE(Conf);
}
else
{
WriteOpers("*** AUTOCONNECT: Error autoconnecting \002%s\002: %s.",x->Name.c_str(),strerror(errno));
- delete newsocket;
+ DELETE(newsocket);
}
}
}
else
{
WriteServ(user->fd,"NOTICE %s :*** CONNECT: Error connecting \002%s\002: %s.",user->nick,x->Name.c_str(),strerror(errno));
- delete newsocket;
+ DELETE(newsocket);
}
return 1;
}
WriteOpers("*** %s used SWHOIS to set %s's extra whois from '%s' to '%s'", user->nick, dest->nick, text->c_str(), line.c_str());
dest->Shrink("swhois");
- delete text;
+ DELETE(text);
}
else if(!Srv->IsUlined(user->server))
{
void OnRehash(const std::string ¶meter)
{
- delete Conf;
+ DELETE(Conf);
Conf = new ConfigReader();
}
{
std::string* swhois = (std::string*)field;
user->Shrink("swhois");
- delete swhois;
+ DELETE(swhois);
}
}
{
std::string* swhois = (std::string*)field;
user->Shrink("swhois");
- delete swhois;
+ DELETE(swhois);
}
}
}
if(std::string* old = (std::string*)user->GetExt("swhois"))
{
user->Shrink("swhois");
- delete old;
+ DELETE(old);
}
std::string* text = new std::string(swhois);
virtual ~ModuleSWhois()
{
- delete Conf;
+ DELETE(Conf);
}
virtual Version GetVersion()
temp->fd = FD_MAGIC_NUMBER;
temp->server = "";
Srv->SendMode(setban,3,temp);
- delete temp;
+ DELETE(temp);
}
// we used to delete the item here, but we dont need to as the servermode above does it for us,
break;
virtual ~ModuleVHost()
{
- delete Conf;
+ DELETE(Conf);
}
void Implements(char* List)
virtual void OnRehash(const std::string ¶meter)
{
- delete Conf;
+ DELETE(Conf);
Conf = new ConfigReader;
}
{
InspTimer* n = *y;
n->Tick(TIME);
- delete n;
+ DELETE(n);
}
Timers.erase(found);
- delete x;
+ DELETE(x);
}
}
{
InspTimer* z = *y;
z->Tick(TIME);
- delete z;
+ DELETE(z);
}
Timers.erase(found);
- delete x;
+ DELETE(x);
}
}
}
SE->DelFd(s->GetFd());
module_sockets.erase(a);
s->Close();
- delete s;
+ DELETE(s);
break;
}
for (std::vector<ucrec*>::iterator n = chans.begin(); n != chans.end(); n++)
{
ucrec* x = (ucrec*)*n;
- delete x;
+ DELETE(x);
}
}
}
}
clientlist.erase(iter);
- delete user;
+ DELETE(user);
}
}
if (group->size() > 10)
{
WhoWasGroup *a = (WhoWasGroup*)*(group->begin());
- delete a;
+ DELETE(a);
group->pop_front();
}
while ((n->begin() != n->end()) && ((*n->begin())->signon < TIME - 259200)) // 3 days
{
WhoWasGroup *a = *(n->begin());
- delete a;
+ DELETE(a);
n->erase(n->begin());
}
}
if (iter != clientlist.end())
{
userrec* goner = iter->second;
- delete goner;
+ DELETE(goner);
clientlist.erase(iter);
}
}
Goners->Apply();
- delete Goners;
+ DELETE(Goners);
}
void stats_k(userrec* user)