From: Timo Sirainen Date: Mon, 31 Aug 2009 18:14:29 +0000 (-0400) Subject: master: Fixes to checks using service's client_limit. X-Git-Tag: 2.0.alpha1~212 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3a0f9aa9504497e4e47f32df54fbf47fdc7423b6;p=thirdparty%2Fdovecot%2Fcore.git master: Fixes to checks using service's client_limit. --HG-- branch : HEAD --- diff --git a/src/master/service-monitor.c b/src/master/service-monitor.c index c7bd74c10f..7638f6c9ce 100644 --- a/src/master/service-monitor.c +++ b/src/master/service-monitor.c @@ -91,7 +91,7 @@ static void service_status_input(struct service *service) i_assert(service->process_avail <= service->process_count); } - if (status.available_count == service->set->client_limit) + if (status.available_count == service->client_limit) process->idle_start = ioloop_time; } process->available_count = status.available_count; diff --git a/src/master/service-process.c b/src/master/service-process.c index a5362be13b..fe2fc38213 100644 --- a/src/master/service-process.c +++ b/src/master/service-process.c @@ -369,7 +369,6 @@ service_process_setup_environment(struct service *service, unsigned int uid) { const struct master_service_settings *set = service->list->service_set; const char *const *p; - unsigned int limit; /* remove all environment, and put back what we need */ env_clean(); @@ -396,12 +395,8 @@ service_process_setup_environment(struct service *service, unsigned int uid) break; } - limit = service->set->client_limit; - if (limit == 0) { - /* fallback to default limit */ - limit = service->set->master_set->default_client_limit; - } - env_put(t_strdup_printf(MASTER_CLIENT_LIMIT_ENV"=%u", limit)); + env_put(t_strdup_printf(MASTER_CLIENT_LIMIT_ENV"=%u", + service->client_limit)); if (service->set->service_count != 0) { env_put(t_strdup_printf(MASTER_SERVICE_COUNT_ENV"=%u", service->set->service_count)); @@ -522,13 +517,7 @@ service_process_create(struct service *service, const char *const *auth_args, timeout_add(SERVICE_FIRST_STATUS_TIMEOUT_SECS * 1000, service_process_status_timeout, process); - process->available_count = service->set->client_limit; - if (process->available_count == 0) { - /* fallback to default limit */ - process->available_count = - service->set->master_set->default_client_limit; - } - + process->available_count = service->client_limit; service->process_count++; service->process_avail++; diff --git a/src/master/service.c b/src/master/service.c index 50599f492d..a26ce66c95 100644 --- a/src/master/service.c +++ b/src/master/service.c @@ -157,6 +157,12 @@ service_create(pool_t pool, const struct service_settings *set, service->list = service_list; service->set = set; + service->client_limit = set->client_limit != 0 ? set->client_limit : + set->master_set->default_client_limit; + if (set->service_count > 0 && + service->client_limit < set->service_count) + service->client_limit = set->service_count; + service->type = SERVICE_TYPE_UNKNOWN; if (*set->type != '\0') { if (strcmp(set->type, "log") == 0) diff --git a/src/master/service.h b/src/master/service.h index f9eba36c9b..10b6c9286a 100644 --- a/src/master/service.h +++ b/src/master/service.h @@ -68,6 +68,9 @@ struct service { /* max number of processes allowed */ unsigned int process_limit; + /* Maximum number of client connections the service can handle. */ + unsigned int client_limit; + /* log process pipe file descriptors. */ int log_fd[2]; /* fd that log process sees log_fd[0] as. can be used to identify