diff --git a/mediator.c b/mediator.c index eba9d96..3fe3a3f 100644 --- a/mediator.c +++ b/mediator.c @@ -32,7 +32,7 @@ static pthread_t signal_thread, map_reload_thread, callid_fetch_thread, - callid_work_thread; + callid_work_threads[4]; static GQueue callid_process_queue = G_QUEUE_INIT; static pthread_cond_t callid_process_cond = PTHREAD_COND_INITIALIZER; @@ -389,6 +389,8 @@ static void *callid_worker(void *p) { /**********************************************************************/ int main(int argc, char **argv) { + int i; + #if !GLIB_CHECK_VERSION(2,32,0) g_thread_init(NULL); #endif @@ -447,8 +449,9 @@ int main(int argc, char **argv) abort(); if (pthread_create(&callid_fetch_thread, NULL, callid_fetcher, NULL)) abort(); - if (pthread_create(&callid_work_thread, NULL, callid_worker, NULL)) - abort(); + for (i = 0; i < G_N_ELEMENTS(callid_work_threads); i++) + if (pthread_create(&callid_work_threads[i], NULL, callid_worker, NULL)) + abort(); /* the signal thread terminates when we should shut down */ pthread_join(signal_thread, NULL); @@ -458,8 +461,10 @@ int main(int argc, char **argv) pthread_join(map_reload_thread, NULL); pthread_cancel(callid_fetch_thread); pthread_join(callid_fetch_thread, NULL); - pthread_cancel(callid_work_thread); - pthread_join(callid_work_thread, NULL); + for (i = 0; i < G_N_ELEMENTS(callid_work_threads); i++) { + pthread_cancel(callid_work_threads[i]); + pthread_join(callid_work_threads[i], NULL); + } __mediator_destroy_maps(&med_tables);