]> jfr.im git - irc/quakenet/newserv.git/commitdiff
Include the count handler in the main event handlers until we get priority hooks.
authorChris Porter <redacted>
Thu, 2 Oct 2008 00:15:18 +0000 (01:15 +0100)
committerChris Porter <redacted>
Thu, 2 Oct 2008 00:15:18 +0000 (01:15 +0100)
Unload the database when migration is complete to stop the schedule stepping on it.

trusts/events.c
trusts/trusts.c
trusts/trusts.h
trusts/trusts_commands.c

index 9a65fbac8f5f33980367530831888640bcd5814f..a5492f2909dc14207f27d42c2fbf95f31a62966c 100644 (file)
@@ -1,6 +1,8 @@
 #include "../core/hooks.h"
 #include "trusts.h"
 
+static void __counthandler(int hooknum, void *arg);
+
 static void __newnick(int hooknum, void *arg) {
   nick *sender = arg;
   uint32_t host;
@@ -18,6 +20,8 @@ static void __newnick(int hooknum, void *arg) {
   setnextbytrust(sender, th->users);
   th->users = sender;
 
+  /* sucks we have to do this, at least until we get priority hooks */
+  __counthandler(HOOK_TRUSTS_NEWNICK, sender);
   triggerhook(HOOK_TRUSTS_NEWNICK, sender);
 }
 
@@ -28,6 +32,7 @@ static void __lostnick(int hooknum, void *arg) {
   if(!th)
     return;
 
+  __counthandler(HOOK_TRUSTS_LOSTNICK, sender);
   triggerhook(HOOK_TRUSTS_LOSTNICK, sender);
 
   /*
@@ -76,8 +81,9 @@ static void __dbloaded(int hooknum, void *arg) {
   registerhook(HOOK_NICK_NEWNICK, __newnick);
   registerhook(HOOK_NICK_LOSTNICK, __lostnick);
 
-  registerhook(HOOK_TRUSTS_NEWNICK, __counthandler);
+/*  registerhook(HOOK_TRUSTS_NEWNICK, __counthandler);
   registerhook(HOOK_TRUSTS_LOSTNICK, __counthandler);
+*/
 
   /* we could do it by host, but hosts and ips are not bijective :( */
   for(i=0;i<NICKHASHSIZE;i++)
@@ -97,8 +103,10 @@ void trusts_deregisterevents(void) {
     deregisterhook(HOOK_NICK_NEWNICK, __newnick);
     deregisterhook(HOOK_NICK_LOSTNICK, __lostnick);
 
+/*
     deregisterhook(HOOK_TRUSTS_NEWNICK, __counthandler);
     deregisterhook(HOOK_TRUSTS_LOSTNICK, __counthandler);
+*/
   }
 
   deregisterhook(HOOK_TRUSTS_DB_LOADED, __dbloaded);
index ac1a137ca0a1cee0afa232c12c5fc50042e7cf28..232868f52d4aff26044036d21e67e7009aab0a86 100644 (file)
@@ -10,7 +10,7 @@ void trusts_deregisterevents(void);
 
 static void statusfn(int, void *);
 
-static int loaded;
+static int loaded, unloaded;
 
 int trusts_thext, trusts_nextuserext;
 
@@ -36,7 +36,12 @@ void _init(void) {
   trusts_registerevents();
 }
 
-void _fini(void) {
+void trusts_unload(void) {
+  if(unloaded)
+    return;
+
+  unloaded = 1;
+
   if(trusts_thext != -1) {
     releasenickext(trusts_thext);
     releasenickext(trusts_nextuserext);
@@ -50,6 +55,10 @@ void _fini(void) {
   trusts_closedb();
 }
 
+void _fini(void) {
+  trusts_unload();
+}
+
 static void statusfn(int hooknum, void *arg) {
   if((long)arg > 10) {
     char message[100];
index b3af156e15a18d696e63bda12275cae32ef1d0b8..dc0d48c1957adacadf98d6c8b3b7ae287cedb470 100644 (file)
@@ -52,14 +52,15 @@ typedef struct trustgroup {
   struct trustgroup *next;
 } trustgroup;
 
-/* trusts.c */
-extern int trusts_thext, trusts_nextuserext;
-
 #define nextbytrust(x) (nick *)((x)->exts[trusts_nextuserext])
 #define gettrusthost(x) (trusthost *)((x)->exts[trusts_thext])
 #define setnextbytrust(x, y) (x)->exts[trusts_nextuserext] = (y)
 #define settrusthost(x, y) (x)->exts[trusts_thext] = (y)
 
+/* trusts.c */
+extern int trusts_thext, trusts_nextuserext;
+void trusts_unload(void);
+
 /* db.c */
 extern int trustsdbloaded;
 void trusts_reloaddb(void);
index c9d2a43514bace51278ef85c84bb852e3166ad43..3c6aa96534d7f4d20efa0035adef9fe5bc30bd6f 100644 (file)
@@ -15,7 +15,13 @@ static void migrate_status(int errcode, void *tag) {
     return;
 
   if(!errcode) {
-    controlreply(np, "Migration complete, you must reload the module.");
+    controlreply(np, "Migration complete.");
+
+    /* stops flush destroying the database */
+    trusts_freeall();
+
+    trusts_unload();
+    controlreply(np, "All functionality disabled, database unloaded -- please reload the module.");
   } else {
     controlreply(np, "Error %d occured during migration, commands reregistered.", errcode);
     registercommands();