- The big forward port. I probably broke lots of stuff, so please look over any
[ircu2.10.12-pk.git] / ircd / class.c
index 7f6c354de435ca02465b7b1785a9adfe799d5eed..c922dbb686655dddae50100e8282b1cacd93e5c7 100644 (file)
@@ -52,6 +52,7 @@ struct ConnectionClass* make_class(void)
   struct ConnectionClass *tmp;
 
   tmp = (struct ConnectionClass*) MyMalloc(sizeof(struct ConnectionClass));
+  tmp->ref_count = 1;
   assert(0 != tmp);
   ++connClassAllocCount;
   return tmp;
@@ -59,10 +60,11 @@ struct ConnectionClass* make_class(void)
 
 void free_class(struct ConnectionClass* p)
 {
-  if (p) {
+  if (p)
+  {
     assert(0 == p->valid);
     if (p->cc_name)
-     MyFree(p->cc_name);
+      MyFree(p->cc_name);
     MyFree(p);
     --connClassAllocCount;
   }
@@ -123,9 +125,10 @@ void class_delete_marked(void)
      */
     if (cl->valid)
       prev = cl;
-    else {
+    else
+    {
       prev->next = cl->next;
-      if (0 == cl->ref_count)
+      if (0 == --cl->ref_count)
         free_class(cl);
     }
   }
@@ -163,7 +166,7 @@ get_client_class(struct Client *acptr)
   if (acptr && !IsMe(acptr) && (cli_confs(acptr)))
     for (tmp = cli_confs(acptr); tmp; tmp = tmp->next)
     {
-      if (tmp->value.aconf && !(cl = tmp->value.aconf->conn_class))
+      if (tmp->value.aconf && (cl = tmp->value.aconf->conn_class))
         return ConClass(cl);
     }
   return "(null-class)";
@@ -198,7 +201,11 @@ void add_class(char *name, unsigned int ping, unsigned int confreq,
     t->next = p;
   }
   else
+  {
+    if (ConClass(t) != NULL)
+      MyFree(ConClass(t));
     p = t;
+  }
   Debug((DEBUG_DEBUG, "Add Class %s: cf: %u pf: %u ml: %u sq: %d",
          name, confreq, ping, maxli, sendq));
   ConClass(p) = name;
@@ -224,7 +231,8 @@ struct ConnectionClass* find_class(const char *name)
 }
 
 void
-report_classes(struct Client *sptr)
+report_classes(struct Client *sptr, struct StatDesc *sd, int stat,
+               char *param)
 {
   struct ConnectionClass *cltmp;