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;
{
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();
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));
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++;
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)
/* 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