From de70a6f77fc3b350eeee4e2a0d29dd07ddde431b Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Thu, 18 Mar 2010 04:28:32 +0200 Subject: [PATCH] lib-master: Don't assert-crash if client_limit < service_count. --HG-- branch : HEAD --- src/lib-master/master-service.c | 35 +++++++++++++++++---------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/src/lib-master/master-service.c b/src/lib-master/master-service.c index 6277cd863c..43ed8e89a0 100644 --- a/src/lib-master/master-service.c +++ b/src/lib-master/master-service.c @@ -541,33 +541,34 @@ void master_service_client_connection_destroyed(struct master_service *service) master_service_io_listeners_add(service); i_assert(service->total_available_count > 0); + i_assert(service->service_count_left > 0); + + if (service->service_count_left == service->total_available_count) { + service->total_available_count--; + service->service_count_left--; + } else { + if (service->service_count_left != (unsigned int)-1) + service->service_count_left--; - 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++; - master_status_update(service); - } else { - /* we have only limited amount of service requests left */ - i_assert(service->service_count_left > 0); - service->service_count_left--; - service->total_available_count--; - - if (service->service_count_left == 0) { - i_assert(service->master_status.available_count == - service->total_available_count); - master_service_stop(service); - } } - if ((service->io_status_error == NULL || service->listeners == NULL) && - service->master_status.available_count == - service->total_available_count) { + if (service->service_count_left == 0) { + i_assert(service->master_status.available_count == + service->total_available_count); + master_service_stop(service); + } else if ((service->io_status_error == NULL || + service->listeners == NULL) && + service->master_status.available_count == + service->total_available_count) { /* we've finished handling all clients, and a) master has closed the connection b) there are no listeners (std-client?) */ master_service_stop(service); + } else { + master_status_update(service); } } -- 2.47.3