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