changeset 9868:63d2755c9211 HEAD

lib-master: Make sure master_status.available_count is updated correctly.
author Timo Sirainen <tss@iki.fi>
date Fri, 04 Sep 2009 14:17:48 -0400
parents 6168a479c54b
children 464c01ae9f0c
files src/lib-master/master-service.c
diffstat 1 files changed, 9 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-master/master-service.c	Fri Sep 04 14:17:03 2009 -0400
+++ b/src/lib-master/master-service.c	Fri Sep 04 14:17:48 2009 -0400
@@ -330,11 +330,17 @@
 void master_service_set_client_limit(struct master_service *service,
 				     unsigned int client_limit)
 {
+	unsigned int used;
+
 	i_assert(service->master_status.available_count ==
 		 service->total_available_count);
 
+	used = service->total_available_count -
+		service->master_status.available_count;
+	i_assert(client_limit >= used);
+
 	service->total_available_count = client_limit;
-	service->master_status.available_count = client_limit;
+	service->master_status.available_count = client_limit - used;
 }
 
 unsigned int master_service_get_client_limit(struct master_service *service)
@@ -422,6 +428,8 @@
 
 	if (service->service_count_left != service->total_available_count) {
 		i_assert(service->service_count_left == (unsigned int)-1);
+		i_assert(service->master_status.available_count <
+			 service->total_available_count);
 		service->master_status.available_count++;
 	} else {
 		/* we have only limited amount of service requests left */