fixed renameAccount function (merging mode)
[NeonServV5.git] / src / main.c
index 57e4939b8b6d4b185bb624062b725875e30bfdfd..d17647d72f227ee3c5a4d742ca2e739d0e1b06f1 100644 (file)
 #include "IOHandler.h"
 #include "statistics.h"
 
-static struct {
-    time_t start_time;
-    int running : 1;
-    int restart : 1;
-    int run_as_daemon : 1;
-    int daemonized : 1;
-    int loglevel : 8;
-    int loaded_config : 1;
-    int running_threads : 8;
-    
-    int argc;
-    char **argv;
-    
-    char config[MAXLEN];
-    char pidfile[MAXLEN];
-} process_state;
+struct ProcessState process_state;
 
 static FILE *log_fptr = NULL;
 
@@ -168,8 +153,8 @@ static int reload_configuration() {
             return 3;
         }
         free(modulelist);
+        event_reload(0);
     }
-    event_reload(!process_state.loaded_config);
     process_state.loaded_config = 1;
     return 0;
 }
@@ -198,9 +183,24 @@ void initialize_subsystems() {
 }
 
 void shutdown_subsystems() {
-    stop_modules();
     free_sockets(1);
-    usleep(10000); //wait for disconnect (10ms)
+    //wait 50ms (run iohandler)
+    {
+        struct timeval timeout, ctime1, ctime2;
+        gettimeofday(&ctime1, NULL);
+        ctime1.tv_usec += 50000;
+        if(ctime1.tv_usec > 1000000) {
+            ctime1.tv_usec -= 1000000;
+            ctime1.tv_sec++;
+        }
+        do {
+            timeout.tv_sec = 0;
+            timeout.tv_usec = 10000;
+            iohandler_poll_timeout(timeout);
+            gettimeofday(&ctime2, NULL);
+        } while(timeval_is_bigger(ctime1, ctime2));
+    }
+    stop_modules();
     free_sockets(0);
     qserver_free();
     free_parser();