Merge branch 'master' into IOMultiplexer
authorpk910 <philipp@zoelle1.de>
Mon, 27 Aug 2012 04:26:14 +0000 (06:26 +0200)
committerpk910 <philipp@zoelle1.de>
Mon, 27 Aug 2012 04:26:14 +0000 (06:26 +0200)
1  2 
src/main.c

diff --combined src/main.c
index 11272635f808d570dcb0ede01f3be65794902659,17b8258c5110fd17760cce6313f4d5a2154d11d8..8bc23ddbcdffff5ec7330ce16c2ba4aa20d78204
  #include "IRCQueue.h"
  #include "DBHelper.h"
  #include "ConfigParser.h"
 -#include "ssl.h"
  #include "QServer.h"
  #include "version.h"
  #include "modules.h"
  #include "module_commands.h"
  #include "ModuleFunctions.h"
 +#include "IOHandler.h"
  
  time_t start_time;
  static int running, hard_restart;
@@@ -108,23 -108,30 +108,23 @@@ static int load_mysql_config() 
      return 1;
  }
  
 -#ifdef HAVE_THREADS
 -pthread_t *current_threads = NULL;
 +static TIMEQ_CALLBACK(clear_cache) {
 +    timeq_add(CLEAR_CACHE_INTERVAL, 0, clear_cache, NULL);
 +    clearTempUsers();
 +    destroyEvents();
 +    mysql_free();
 +}
  
 -void * thread_main(void *arg) {
 -    time_t socket_wait;
 +void *thread_main(void *arg) {
      while(running) {
 -        socket_wait = time(0) + SOCKET_SELECT_TIME;
 -        do {
 -            if(!socket_loop(SOCKET_SELECT_TIME)) {
 -                if(!running) break;
 -                putlog(LOGLEVEL_ERROR, "No more active Bots... shutting down.\n");
 -                cleanup();
 -                exit(0);
 -            }
 -        } while(time(0) < socket_wait);
 -        if(!running) break;
 -        clearTempUsers();
 -        destroyEvents();
 -        mysql_free();
 +        iohandler_poll();
      }
 -    running_threads--;
      return NULL;
  }
  
 +#ifdef HAVE_THREADS
 +pthread_t *current_threads = NULL;
 +
  int getCurrentThreadID() {
      if(!current_threads) return 0;
      int i;
@@@ -202,6 -209,7 +202,7 @@@ int main(int argc, char *argv[]) 
          fprintf(stderr, "Unable to load " CONF_FILE "\n");
          exit(0);
      }
+     init_bind();
      event_reload(1);
      #if HAVE_THREADS
      THREAD_MUTEX_INIT(log_sync);
@@@ -256,6 -264,18 +257,6 @@@ main
      
      start_time = time(0);
      
 -    #ifdef WIN32
 -    int res;
 -    WSADATA wsadata;
 -    // Start Windows Sockets.
 -    res = WSAStartup(MAKEWORD(2, 0), &wsadata);
 -    if (res)
 -    {
 -        perror("Unable to start Windows Sockets");
 -        return 0;
 -    }
 -    #endif
 -    
      statistics_enabled = get_int_field("statistics.enable");
      
      #ifdef HAVE_THREADS
      THREAD_MUTEX_INIT(whohandler_mass_sync);
      #endif
      
 -    queue_init();
 -    init_sockets();
 -    init_timeq();
      init_lang();
 -    ssl_init();
      init_parser();
      init_UserNode();
      init_ChanNode();
      
      timeq_add(90, 0, main_checkauths, NULL);
      
 +    timeq_add(CLEAR_CACHE_INTERVAL, 0, clear_cache, NULL);
 +    
      int worker_threads = get_int_field("General.worker_threads");
      if(!worker_threads) worker_threads = 1;
      running = 1;
          running_threads++;
          pthread_create(&current_threads[tid_id], NULL, thread_main, NULL);
      }
 -    int usleep_delay = 1000000 / TICKS_PER_SECOND;
 -    while(running) {
 -        timeq_tick();
 -        loop_modules();
 -        qserver_loop();
 -        queue_loop();
 -        mysql_free();
 -        usleep(usleep_delay);
 -    }
 +    #endif
 +    thread_main(NULL);
 +    #ifdef HAVE_THREADS
      for(tid_id = 0; tid_id < worker_threads; tid_id++) {
          pthread_join(current_threads[tid_id], NULL);
      }
      running_threads = 0;
 -    #else
 -    time_t socket_wait;
 -    while(running) {
 -        socket_wait = time(0) + SOCKET_SELECT_TIME;
 -        do {
 -            if(!socket_loop(SOCKET_SELECT_TIME)) {
 -                putlog(LOGLEVEL_ERROR, "No more active Bots... shutting down.\n");
 -                cleanup();
 -                exit(0);
 -            }
 -        } while(time(0) < socket_wait);
 -        timeq_tick();
 -        loop_modules();
 -        clearTempUsers();
 -        destroyEvents();
 -        qserver_loop();
 -        queue_loop();
 -        mysql_free();
 -    }
      #endif
      cleanup();
      if(hard_restart) {