]> jfr.im git - irc/evilnet/x3.git/blobdiff - src/main-common.c
Couple of srvx updates.
[irc/evilnet/x3.git] / src / main-common.c
index 12eabd50d456539875f17fa859d305fd7cb35967..1cd96dbbb414673c0957cc2f76ff3a8949c33531 100644 (file)
@@ -381,20 +381,24 @@ received_ping(void)
 }
 
 static exit_func_t *ef_list;
+static void **ef_list_extra;
 static unsigned int ef_size = 0, ef_used = 0;
 
-void reg_exit_func(exit_func_t handler)
+void reg_exit_func(exit_func_t handler, void *extra)
 {
     if (ef_used == ef_size) {
         if (ef_size) {
             ef_size <<= 1;
             ef_list = realloc(ef_list, ef_size*sizeof(exit_func_t));
+            ef_list_extra = realloc(ef_list_extra, ef_size*sizeof(void*));
         } else {
             ef_size = 8;
             ef_list = malloc(ef_size*sizeof(exit_func_t));
+            ef_list_extra = malloc(ef_size*sizeof(void*));
         }
     }
-    ef_list[ef_used++] = handler;
+    ef_list[ef_used] = handler;
+    ef_list_extra[ef_used++] = extra;
 }
 
 void call_exit_funcs(void)
@@ -408,9 +412,11 @@ void call_exit_funcs(void)
      */
 
     while (n > 0) {
-        ef_list[--n]();
+        --n;
+        ef_list[n](ef_list_extra[n]);
     }
     free(ef_list);
+    free(ef_list_extra);
     ef_used = ef_size = 0;
 }
 
@@ -431,6 +437,11 @@ conf_globals(void)
     const char *info;
     dict_t dict;
 
+    info = conf_get_data("services/opserv/nick", RECDB_QSTRING);
+    if (info && (info[0] == '.'))
+        info = NULL;
+    init_opserv(info);
+
     info = conf_get_data("services/global/nick", RECDB_QSTRING);
     if (info && (info[0] == '.'))
         info = NULL;
@@ -468,11 +479,6 @@ conf_globals(void)
         policer_params_set(luser_policer_params, "drain-rate", "0.50");
     }
 
-    info = conf_get_data("services/opserv/nick", RECDB_QSTRING);
-    if (info && (info[0] == '.'))
-        info = NULL;
-    init_opserv(info);
-
     info = conf_get_data("services/spamserv/nick", RECDB_QSTRING);
     if (info && (info[0] == '.'))
         info = NULL;
@@ -584,7 +590,7 @@ license()
            "Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\n\n");
 }
 
-void main_shutdown(void)
+void main_shutdown(UNUSED_ARG(void *extra))
 {
     struct uplinkNode *ul, *ul_next;
     ioset_cleanup();