X-Git-Url: http://git.pk910.de/?p=NeonServV5.git;a=blobdiff_plain;f=src%2Fmain.c;h=60b7ec6ac4b37fb9e1f5f08f95ea29a0c02b176b;hp=ae5d7829608775db08b7ff4adeb1f46f18cb6c5f;hb=55831bf424312a6908ca07a904f288fba0919a9a;hpb=44436a96352a38631237978c9fd431cef3d85cfb diff --git a/src/main.c b/src/main.c index ae5d782..60b7ec6 100644 --- a/src/main.c +++ b/src/main.c @@ -1,5 +1,5 @@ /* main.c - NeonServ v5.3 - * Copyright (C) 2011 Philipp Kreil (pk910) + * Copyright (C) 2011-2012 Philipp Kreil (pk910) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -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[]. */