Prevent the creation of new threads if system load climbs at shutdown
authorDave West <davew@uncensored.citadel.org>
Wed, 5 Dec 2007 21:03:04 +0000 (21:03 +0000)
committerDave West <davew@uncensored.citadel.org>
Wed, 5 Dec 2007 21:03:04 +0000 (21:03 +0000)
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.

citadel/server_main.c
citadel/sysdep.c

index 20bc5dddf0629e0b2912e60a5a7fe2fa0b90302e..27942365d7ba7cd90aa37c0e6dcd794de8b6fda8 100644 (file)
@@ -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++)
index e24af347b234342b2ac37d96898d82ccf40a01a7..e559a93ab7aa6edd0733526874bcf7afcc82b0f8 100644 (file)
@@ -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)