From: Timo Sirainen Date: Fri, 4 Sep 2009 18:17:48 +0000 (-0400) Subject: lib-master: Make sure master_status.available_count is updated correctly. X-Git-Tag: 2.0.alpha1~184 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=885e1b36da370a674c0fd3b85db53740d7dcbd9b;p=thirdparty%2Fdovecot%2Fcore.git lib-master: Make sure master_status.available_count is updated correctly. --HG-- branch : HEAD --- diff --git a/src/lib-master/master-service.c b/src/lib-master/master-service.c index 3769b4c70f..22ff14356c 100644 --- a/src/lib-master/master-service.c +++ b/src/lib-master/master-service.c @@ -330,11 +330,17 @@ void master_service_env_clean(bool preserve_home) 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_destroyed(struct master_service *service) 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 */