X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fthreads.c;h=5773c8e3f82fd04235f3e77bcf59cfb1064bd9a6;hb=5c39ca8a3c875df98163fed8923c258f21bb3f66;hp=4a4fe5163ec2260335ca7e537e1a39ea7cf2f601;hpb=5365493a013629f909c27528febb9660e5d1d863;p=citadel.git diff --git a/citadel/threads.c b/citadel/threads.c index 4a4fe5163..5773c8e3f 100644 --- a/citadel/threads.c +++ b/citadel/threads.c @@ -1,7 +1,7 @@ /* * Thread handling stuff for Citadel server * - * Copyright (c) 1987-2011 by the citadel.org team + * Copyright (c) 1987-2015 by the citadel.org team * * This program is open source software; you can redistribute it and/or modify * it under the terms of the GNU General Public License, version 3. @@ -12,48 +12,16 @@ * GNU General Public License for more details. */ -#include -#include -#include -#include #include -#include -#include -#include -#include +#include #include - -#include "sysdep.h" -#if TIME_WITH_SYS_TIME -# include -# include -#else -# if HAVE_SYS_TIME_H -# include -# else -# include -# endif -#endif - -#ifdef HAVE_SYSCALL_H -# include -#else -# if HAVE_SYS_SYSCALL_H -# include -# endif -#endif - #include - -#include "threads.h" -#include "ctdl_module.h" #include "modules_init.h" -#include "housekeeping.h" +#include "serv_extensions.h" +#include "ctdl_module.h" #include "config.h" -#include "citserver.h" -#include "sysdep_decls.h" #include "context.h" -#include "event_client.h" +#include "threads.h" int num_workers = 0; /* Current number of worker threads */ @@ -63,6 +31,7 @@ pthread_mutex_t Critters[MAX_SEMAPHORES]; /* Things needing locking */ struct thread_tsd masterTSD; int server_shutting_down = 0; /* set to nonzero during shutdown */ +pthread_mutex_t ThreadCountMutex;; void InitializeSemaphores(void) @@ -151,7 +120,7 @@ void *CTC_backend(void *supplied_start_routine) start_routine(NULL); - free(mytsd); +// free(mytsd); return(NULL); } @@ -191,6 +160,8 @@ void go_threading(void) abort(); } + pthread_mutex_init(&ThreadCountMutex, NULL); + /* Second call to module init functions now that threading is up */ initialise_modules(1); @@ -198,25 +169,16 @@ void go_threading(void) CtdlThreadCreate(worker_thread); /* The supervisor thread monitors worker threads and spawns more of them if it finds that - * they are all in use. FIXME make the 256 max threads a configurable value. + * they are all in use. */ while (!server_shutting_down) { - if ((active_workers == num_workers) && (num_workers < 256)) { + if ((active_workers == num_workers) && (num_workers < CtdlGetConfigInt("c_max_workers"))) { CtdlThreadCreate(worker_thread); } usleep(1000000); } /* When we get to this point we are getting ready to shut down our Citadel server */ - if (!EventQShuttingDown) - { - EventQShuttingDown = 1; - ShutDownEventQueues(); - } - while (!EVQShutDown) - usleep(1000000); - - terminate_all_sessions(); /* close all client sockets */ CtdlShutdownServiceHooks(); /* close all listener sockets to prevent new connections */ PerformSessionHooks(EVT_SHUTDOWN); /* run any registered shutdown hooks */