Mercurial > dovecot > core-2.2
changeset 9840:2dc1e03cad11 HEAD
master: Fixes to checks using service's client_limit.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 31 Aug 2009 14:14:29 -0400 |
parents | d76916a6df44 |
children | 331cf0bd593e |
files | src/master/service-monitor.c src/master/service-process.c src/master/service.c src/master/service.h |
diffstat | 4 files changed, 13 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/src/master/service-monitor.c Mon Aug 31 14:07:35 2009 -0400 +++ b/src/master/service-monitor.c Mon Aug 31 14:14:29 2009 -0400 @@ -91,7 +91,7 @@ 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;
--- a/src/master/service-process.c Mon Aug 31 14:07:35 2009 -0400 +++ b/src/master/service-process.c Mon Aug 31 14:14:29 2009 -0400 @@ -369,7 +369,6 @@ { 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 @@ 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 @@ 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++;
--- a/src/master/service.c Mon Aug 31 14:07:35 2009 -0400 +++ b/src/master/service.c Mon Aug 31 14:14:29 2009 -0400 @@ -157,6 +157,12 @@ 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)
--- a/src/master/service.h Mon Aug 31 14:07:35 2009 -0400 +++ b/src/master/service.h Mon Aug 31 14:14:29 2009 -0400 @@ -68,6 +68,9 @@ /* 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