From: Dave West Date: Wed, 5 Dec 2007 21:03:04 +0000 (+0000) Subject: Prevent the creation of new threads if system load climbs at shutdown X-Git-Tag: v7.86~2677 X-Git-Url: https://code.citadel.org/?p=citadel.git;a=commitdiff_plain;h=596b8a9f97d6b4f79b158ecb7df296c7c2a7c6f0 Prevent the creation of new threads if system load climbs at shutdown time. Also turn signals back on for threads. For some reason we occasionally crash on the shutdown but enabling signals in the threads seems to stop this????? Also ecrash needs the signals turned on. --- diff --git a/citadel/server_main.c b/citadel/server_main.c index 20bc5dddf..27942365d 100644 --- a/citadel/server_main.c +++ b/citadel/server_main.c @@ -426,7 +426,7 @@ void go_threading(void) */ // if ((CtdlThreadGetWorkers() < config.c_max_workers) && (CtdlThreadGetWorkers() < num_sessions)) // && (CtdlThreadLoadAvg < 90) ) - if ((CtdlThreadGetWorkers() < config.c_max_workers) && (CtdlThreadGetWorkerAvg() > 60) && (CtdlThreadGetLoadAvg() < 90) ) + if ((CtdlThreadGetWorkers() < config.c_max_workers) && (CtdlThreadGetWorkerAvg() > 60) && (CtdlThreadGetLoadAvg() < 90) && (CT->state > CTDL_THREAD_STOP_REQ)) { for (i=0; i<5 ; i++) // for (i=0; i< (num_sessions - CtdlThreadGetWorkers()) ; i++) diff --git a/citadel/sysdep.c b/citadel/sysdep.c index e24af347b..e559a93ab 100644 --- a/citadel/sysdep.c +++ b/citadel/sysdep.c @@ -1838,8 +1838,8 @@ struct CtdlThreadNode *ctdl_internal_create_thread(char *name, long flags, void * when no signals will be processed, but during that time they * should be queued by the operating system. */ - if (pthread_equal(GC_thread, pthread_self())) - sigtrick = ctdl_thread_internal_block_signals(&old_signal_set) == 0; +// if (pthread_equal(GC_thread, pthread_self())) +// sigtrick = ctdl_thread_internal_block_signals(&old_signal_set) == 0; /* * We pass this_thread into the thread as its args so that it can find out information @@ -1857,13 +1857,13 @@ struct CtdlThreadNode *ctdl_internal_create_thread(char *name, long flags, void pthread_cond_destroy(&(this_thread->SleepCond)); pthread_attr_destroy(&this_thread->attr); free(this_thread); - if (sigtrick) - ctdl_thread_internal_restore_signals(&old_signal_set); +// if (sigtrick) +// ctdl_thread_internal_restore_signals(&old_signal_set); return NULL; } - if (sigtrick) - ctdl_thread_internal_restore_signals(&old_signal_set); +// if (sigtrick) +// ctdl_thread_internal_restore_signals(&old_signal_set); num_threads++; // Increase the count of threads in the system. if(this_thread->flags & CTDLTHREAD_WORKER)