]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
master: Fixes to checks using service's client_limit.
authorTimo Sirainen <tss@iki.fi>
Mon, 31 Aug 2009 18:14:29 +0000 (14:14 -0400)
committerTimo Sirainen <tss@iki.fi>
Mon, 31 Aug 2009 18:14:29 +0000 (14:14 -0400)
--HG--
branch : HEAD

src/master/service-monitor.c
src/master/service-process.c
src/master/service.c
src/master/service.h

index c7bd74c10fd7cc5892a8bce9a8661d809e424766..7638f6c9ce781788e4d5ccd1b2974a28c2ecaf6e 100644 (file)
@@ -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;
index a5362be13bcb949322d00ee4edd164950bfc415a..fe2fc382139bb90a41fc1292a94623ccdb3865a5 100644 (file)
@@ -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++;
 
index 50599f492d9ccabdec39e79cca9203639cc3ba0e..a26ce66c959fc86f36559320b87a19d4dbf2db1a 100644 (file)
@@ -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)
index f9eba36c9b783fbdc6470ad650dd3bf9e9257964..10b6c9286a0454689ffe979d4f78677677287af5 100644 (file)
@@ -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