Browse Source

Fix memory leak when removing a channel with roles

Bryan Drewery 12 years ago
parent
commit
4531273f12
1 changed files with 6 additions and 2 deletions
  1. 6 2
      src/mod/channels.mod/chanmisc.c

+ 6 - 2
src/mod/channels.mod/chanmisc.c

@@ -969,6 +969,8 @@ static void init_channel(struct chanset_t *chan, bool reset)
   chan->channel.floodtime = new bd::HashTable<bd::String, bd::HashTable<flood_t, time_t> >;
   chan->channel.floodnum  = new bd::HashTable<bd::String, bd::HashTable<flood_t, int> >;
   chan->channel.cached_members = new bd::HashTable<bd::String, memberlist*>;
+  chan->bot_roles = new bd::HashTable<bd::String, int>;
+  chan->role_bots = new bd::HashTable<short, bd::Array<bd::String> >;
   chan->role = 0;
   chan->needs_role_rebalance = 1;
 }
@@ -1016,6 +1018,10 @@ void clear_channel(struct chanset_t *chan, bool reset)
   chan->channel.floodtime = NULL;
   delete chan->channel.floodnum;
   chan->channel.floodnum = NULL;
+  delete chan->bot_roles;
+  chan->bot_roles = NULL;
+  delete chan->role_bots;
+  chan->role_bots = NULL;
 
   if (chan->channel.cached_members) {
     if (chan->channel.cached_members->size()) {
@@ -1161,8 +1167,6 @@ int channel_add(char *result, const char *newname, char *options, bool isdefault
     chan->channel.last_eI = 0;
     chan->channel.floodtime = NULL;
     chan->channel.floodnum = NULL;
-    chan->bot_roles = new bd::HashTable<bd::String, int>;
-    chan->role_bots = new bd::HashTable<short, bd::Array<bd::String> >;
 
     /* We _only_ put the dname (display name) in here so as not to confuse
      * any code later on. chan->name gets updated with the channel name as