]> jfr.im git - irc/quakenet/newserv.git/commitdiff
Move nterfacer checking of rlines into handlers (where it should be...)
authorChris Porter <redacted>
Tue, 30 Sep 2008 01:15:57 +0000 (02:15 +0100)
committerChris Porter <redacted>
Tue, 30 Sep 2008 01:15:57 +0000 (02:15 +0100)
nterfacer/nterfacer.c
nterfacer/nterfacer.h

index b671a84aecc0ec22c0b6304eca29126d51321c0c..76de70996f2ec042ac533b2b5d412b89ead6381e 100644 (file)
@@ -82,6 +82,29 @@ void _init(void) {
 }
 
 void free_handler(struct handler *hp) {
+  struct rline *li, *pi = NULL;
+
+  for(li=rlines;li;) {
+    if(li->handler == hp) {
+      if(li->socket) {
+        esocket_write_line(li->socket, "%d,OE%d,%s", li->id, BF_UNLOADED, "Service was unloaded.");
+      } else if(li->callback) {
+        li->callback(BF_UNLOADED, "Service was unloaded.", li->tag);
+      }
+      if(pi) {
+        pi->next = li->next;
+        ntfree(li);
+        li = pi->next;
+      } else {
+        rlines = li->next;
+        ntfree(li);
+        li = rlines;
+      }
+    } else {
+      pi=li,li=li->next;
+    }
+  }
+
   freesstring(hp->command);
   ntfree(hp);
 }
@@ -300,7 +323,6 @@ void deregister_handler(struct handler *hl) {
 
 void deregister_service(struct service_node *service) {
   struct service_node *sp, *lp = NULL;
-  struct rline *li, *pi = NULL;
 
   for(sp=tree;sp;lp=sp,sp=sp->next) {
     if(sp == service) {
@@ -318,21 +340,6 @@ void deregister_service(struct service_node *service) {
 
   free_handlers(service);
 
-  for(li=rlines;li;) {
-    if(li->service == service) {
-      if(pi) {
-        pi->next = li->next;
-        ntfree(li);
-        li = pi->next;
-      } else {
-        rlines = li->next;
-        ntfree(li);
-        li = rlines;
-      }
-    } else {
-      pi=li,li=li->next;
-    }
-  }
   freesstring(service->name);
 
   ntfree(service);
index 4e91164fc9bfee25300c86c1e04866b7fd1396b7..69760fdd0d6facafda5a05124d77a4774a5180f7 100644 (file)
@@ -16,6 +16,7 @@
 
 #define BF_OK      0x00
 #define BF_OVER    0xFF
+#define BF_UNLOADED 0xFE
 
 #define SS_IDLE           0x00
 #define SS_VERSIONED      0x01