X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=src%2Fmain.c;h=60b7ec6ac4b37fb9e1f5f08f95ea29a0c02b176b;hb=55831bf424312a6908ca07a904f288fba0919a9a;hp=876dc70be79891645b6edfa6050b8cf84302c273;hpb=bb5692b9cbff069abbf9573c81e86c3cd2061ceb;p=NeonServV5.git diff --git a/src/main.c b/src/main.c index 876dc70..60b7ec6 100644 --- a/src/main.c +++ b/src/main.c @@ -92,6 +92,24 @@ static int load_mysql_config() { return 1; } +#ifdef HAVE_THREADS +void * thread_main(void *arg) { + time_t socket_wait; + while(running) { + socket_wait = time(0) + SOCKET_SELECT_TIME; + do { + socket_loop(SOCKET_SELECT_TIME); + } while(time(0) < socket_wait); + timeq_tick(); + loop_bots(); + clearTempUsers(); + destroyEvents(); + queue_loop(); + } + return NULL; +} +#endif + int main(int argc, char *argv[]) { main: @@ -114,6 +132,7 @@ main: statistics_enabled = get_int_field("statistics.enable"); queue_init(); + init_timeq(); init_lang(); ssl_init(); init_parser(); @@ -133,8 +152,21 @@ main: if(!update_minutes) update_minutes = 2; timeq_add(update_minutes * 60 + 10, main_statistics, NULL); - time_t socket_wait; + int worker_threads = get_int_field("General.worker_threads"); + if(!worker_threads) worker_threads = 1; + running = 1; + #ifdef HAVE_THREADS + pthread_t tid[worker_threads]; + int tid_id = 0; + for(tid_id = 0; tid_id < worker_threads; tid_id++) { + pthread_create(&tid[tid_id], NULL, thread_main, NULL); + } + for(tid_id = 0; tid_id < worker_threads; tid_id++) { + pthread_join(tid[tid_id], NULL); + } + #else + time_t socket_wait; while(running) { socket_wait = time(0) + SOCKET_SELECT_TIME; do { @@ -146,6 +178,7 @@ main: destroyEvents(); queue_loop(); } + #endif cleanup(); if(hard_restart) { /* Append a NULL to the end of argv[]. */