X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fserver_main.c;h=c46c0857a2375fa55bd52064429cfe09f8ea4573;hb=dff1f2c563c6c998431eb687039096a4060dff32;hp=27942365d7ba7cd90aa37c0e6dcd794de8b6fda8;hpb=596b8a9f97d6b4f79b158ecb7df296c7c2a7c6f0;p=citadel.git diff --git a/citadel/server_main.c b/citadel/server_main.c index 27942365d..c46c0857a 100644 --- a/citadel/server_main.c +++ b/citadel/server_main.c @@ -383,12 +383,15 @@ void go_threading(void) if (exit_signal) CtdlThreadStopAll(); check_sched_shutdown(); - begin_critical_section(S_THREAD_LIST); - ctdl_thread_internal_calc_loadavg(); - end_critical_section(S_THREAD_LIST); - + if (CT->state > CTDL_THREAD_STOP_REQ) + { + begin_critical_section(S_THREAD_LIST); + ctdl_thread_internal_calc_loadavg(); + end_critical_section(S_THREAD_LIST); + } + /* Reduce the size of the worker thread pool if necessary. */ - if ((CtdlThreadGetWorkers() > config.c_min_workers) && (CtdlThreadWorkerAvg < 20)) + if ((CtdlThreadGetWorkers() > config.c_min_workers) && (CtdlThreadWorkerAvg < 20) && (CT->state > CTDL_THREAD_STOP_REQ)) { /* Ask a worker thread to stop as we no longer need it */ begin_critical_section(S_THREAD_LIST);