]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-master: Make sure master_status.available_count is updated correctly.
authorTimo Sirainen <tss@iki.fi>
Fri, 4 Sep 2009 18:17:48 +0000 (14:17 -0400)
committerTimo Sirainen <tss@iki.fi>
Fri, 4 Sep 2009 18:17:48 +0000 (14:17 -0400)
--HG--
branch : HEAD

src/lib-master/master-service.c

index 3769b4c70ff9fd7a450ee7c5e25e19cd6909bc13..22ff14356c404635144d2b8c85a5573c4ebc7797 100644 (file)
@@ -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 */