diff --git a/clamav-devel/ChangeLog b/clamav-devel/ChangeLog index 61b875bba..477484cce 100644 --- a/clamav-devel/ChangeLog +++ b/clamav-devel/ChangeLog @@ -1,3 +1,7 @@ +Thu Jun 23 15:49:10 CEST 2005 (tk) +---------------------------------- + * clamd: revert the queue limit patch + Wed Jun 22 21:51:49 BST 2005 (njh) ---------------------------------- * libclamav/pdf.c: Remember to close a file that fails to parse. Fix by diff --git a/clamav-devel/clamd/server-th.c b/clamav-devel/clamd/server-th.c index 4238207ce..e602fd03c 100644 --- a/clamav-devel/clamd/server-th.c +++ b/clamav-devel/clamd/server-th.c @@ -45,14 +45,12 @@ #define FALSE (0) #define TRUE (1) -volatile int progexit = 0; -static pthread_mutex_t exit_mutex = PTHREAD_MUTEX_INITIALIZER; -volatile int reload = 0; -volatile time_t reloaded_time = 0; -static pthread_mutex_t reload_mutex = PTHREAD_MUTEX_INITIALIZER; -volatile int sighup = 0; -static pthread_mutex_t session_mutex = PTHREAD_MUTEX_INITIALIZER; -volatile int session_count = 0; +int progexit = 0; +pthread_mutex_t exit_mutex; +int reload = 0; +time_t reloaded_time = 0; +pthread_mutex_t reload_mutex; +int sighup = 0; typedef struct client_conn_tag { int sd; @@ -60,7 +58,6 @@ typedef struct client_conn_tag { const struct cfgstruct *copt; struct cl_node *root; time_t root_timestamp; - time_t queue_time; const struct cl_limits *limits; int *socketds; int nsockets; @@ -78,24 +75,6 @@ void scanner_thread(void *arg) sigfillset(&sigset); pthread_sigmask(SIG_SETMASK, &sigset, NULL); - timeout = cfgopt(conn->copt, "MaxConnectionQueueTime")->numarg; - if(timeout && (conn->queue_time+timeout < time(NULL))) { - logg("^Aborting Stale connection request\n"); - close(conn->sd); - cl_free(conn->root); - free(conn); - return; - } - pthread_mutex_lock(&exit_mutex); - if(progexit) { - pthread_mutex_unlock(&exit_mutex); - logg("^Dropping connection request to exit\n"); - close(conn->sd); - cl_free(conn->root); - free(conn); - return; - } - pthread_mutex_unlock(&exit_mutex); timeout = cfgopt(conn->copt, "ReadTimeout")->numarg; if(!timeout) timeout = -1; @@ -124,52 +103,28 @@ void scanner_thread(void *arg) break; case COMMAND_SESSION: - if(!session) { - pthread_mutex_lock(&session_mutex); - session_count++; - if(cfgopt(conn->copt, "MaxThreads")->numarg <= session_count) { - logg("^Active sessions(%d) consuming all available threads(%d)\n", session_count, cfgopt(conn->copt, "MaxThreads")->numarg); - } - pthread_mutex_unlock(&session_mutex); - session = TRUE; - } + session = TRUE; timeout = 5; break; case COMMAND_END: - if(session) { - pthread_mutex_lock(&session_mutex); - session_count--; - pthread_mutex_unlock(&session_mutex); - session = FALSE; - } + session = FALSE; break; } if (session) { pthread_mutex_lock(&exit_mutex); if(progexit) { session = FALSE; - pthread_mutex_lock(&session_mutex); - --session_count; - pthread_mutex_unlock(&session_mutex); } pthread_mutex_unlock(&exit_mutex); pthread_mutex_lock(&reload_mutex); if (conn->root_timestamp != reloaded_time) { session = FALSE; - pthread_mutex_lock(&session_mutex); - --session_count; - pthread_mutex_unlock(&session_mutex); } pthread_mutex_unlock(&reload_mutex); } } while (session); - if(session) { - pthread_mutex_lock(&session_mutex); - --session_count; - pthread_mutex_unlock(&session_mutex); - } close(conn->sd); cl_free(conn->root); free(conn); @@ -264,7 +219,7 @@ static struct cl_node *reload_db(struct cl_node *root, const struct cfgstruct *c int acceptloop_th(int *socketds, int nsockets, struct cl_node *root, const struct cfgstruct *copt) { - int new_sd, max_threads, max_queue_size, i; + int new_sd, max_threads, i; unsigned int options = 0; threadpool_t *thr_pool; struct sigaction sigact; @@ -310,8 +265,6 @@ int acceptloop_th(int *socketds, int nsockets, struct cl_node *root, const struc logg("*Listening daemon: PID: %d\n", getpid()); max_threads = cfgopt(copt, "MaxThreads")->numarg; - max_queue_size = cfgopt(copt, "MaxConnectionQueueLength")->numarg; - if(cfgopt(copt, "ScanArchive")->enabled || cfgopt(copt, "ClamukoScanArchive")->enabled) { /* set up limits */ @@ -481,14 +434,14 @@ int acceptloop_th(int *socketds, int nsockets, struct cl_node *root, const struc idletimeout = cfgopt(copt, "IdleTimeout")->numarg; - if((thr_pool=thrmgr_new(max_threads, max_queue_size, idletimeout, scanner_thread)) == NULL) { + if((thr_pool=thrmgr_new(max_threads, idletimeout, scanner_thread)) == NULL) { logg("!thrmgr_new failed\n"); exit(-1); } time(&start_time); - for(;;) { + for(;;) { int socketd = socketds[0]; if(nsockets > 1) { int pollret = poll_fds(socketds, nsockets, -1); @@ -507,7 +460,7 @@ int acceptloop_th(int *socketds, int nsockets, struct cl_node *root, const struc #ifdef HAVE_STRERROR_R logg("!accept() failed: %s\n", strerror_r(errno, buff, BUFFSIZE)); #else - logg("!accept() failed: %d\n", errno); + logg("!accept() failed\n"); #endif continue; } @@ -527,7 +480,6 @@ int acceptloop_th(int *socketds, int nsockets, struct cl_node *root, const struc client_conn->copt = copt; client_conn->root = cl_dup(root); client_conn->root_timestamp = reloaded_time; - time(&client_conn->queue_time); client_conn->limits = &limits; client_conn->socketds = socketds; client_conn->nsockets = nsockets; @@ -566,7 +518,7 @@ int acceptloop_th(int *socketds, int nsockets, struct cl_node *root, const struc root = reload_db(root, copt, FALSE); pthread_mutex_lock(&reload_mutex); reload = 0; - time((time_t *)&reloaded_time); + time(&reloaded_time); pthread_mutex_unlock(&reload_mutex); #ifdef CLAMUKO if(cfgopt(copt, "ClamukoScanOnAccess")->enabled) { diff --git a/clamav-devel/docs/man/clamd.conf.5.in b/clamav-devel/docs/man/clamd.conf.5.in index d8d761e3d..cf0b38c55 100644 --- a/clamav-devel/docs/man/clamd.conf.5.in +++ b/clamav-devel/docs/man/clamd.conf.5.in @@ -104,11 +104,6 @@ Maximum length the queue of pending connections may grow to. .br Default: 15 .TP -\fBMaxConnectionQueueTime NUMBER\fR -Maximum number of seconds a connection can be queued and unprocessed without being aborted when it finally comes time to process it. The value of zero disables the limit. -.br -Default: 20 -.TP \fBMaxThreads NUMBER\fR Maximal number of threads running at the same time. .br diff --git a/clamav-devel/etc/clamd.conf b/clamav-devel/etc/clamd.conf index deb46bb13..ac914c297 100644 --- a/clamav-devel/etc/clamd.conf +++ b/clamav-devel/etc/clamd.conf @@ -90,12 +90,6 @@ LocalSocket /tmp/clamd # Default: 15 #MaxConnectionQueueLength 30 -# Maximum number of seconds a connection can be queued and unprocessed without -# being aborted when it finally comes time to process it. The value of zero -# disables the limit. -# Default: 20 -#MaxConnectionQueueTime 30 - # Clamd uses FTP-like protocol to receive data from remote clients. # If you are using clamav-milter to balance load between remote clamd daemons # on firewall servers you may need to tune the options below. diff --git a/clamav-devel/shared/cfgparser.c b/clamav-devel/shared/cfgparser.c index aa3272b40..0e196ca45 100644 --- a/clamav-devel/shared/cfgparser.c +++ b/clamav-devel/shared/cfgparser.c @@ -72,7 +72,6 @@ struct cfgstruct *getcfg(const char *cfgfile, int verbose) {"TCPSocket", OPT_NUM, -1, NULL, 0}, {"LocalSocket", OPT_STR, -1, NULL, 0}, {"MaxConnectionQueueLength", OPT_NUM, 15, NULL, 0}, - {"MaxConnectionQueueTime", OPT_NUM, 20, NULL, 0}, {"StreamMaxLength", OPT_COMPSIZE, 10485760, NULL, 0}, {"StreamMinPort", OPT_NUM, 1024, NULL, 0}, {"StreamMaxPort", OPT_NUM, 2048, NULL, 0},