dovecot-2.0: lib-master: Make sure master_status.available_count...

dovecot at dovecot.org dovecot at dovecot.org
Fri Sep 4 21:17:55 EEST 2009


details:   http://hg.dovecot.org/dovecot-2.0/rev/63d2755c9211
changeset: 9868:63d2755c9211
user:      Timo Sirainen <tss at iki.fi>
date:      Fri Sep 04 14:17:48 2009 -0400
description:
lib-master: Make sure master_status.available_count is updated correctly.

diffstat:

1 file changed, 9 insertions(+), 1 deletion(-)
src/lib-master/master-service.c |   10 +++++++++-

diffs (31 lines):

diff -r 6168a479c54b -r 63d2755c9211 src/lib-master/master-service.c
--- 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(str
 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 @@ void master_service_client_connection_de
 
 	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 */


More information about the dovecot-cvs mailing list