dovecot-2.0: lib-master: Don't assert-crash if client_limit < se...

dovecot at dovecot.org dovecot at dovecot.org
Thu Mar 18 04:28:35 EET 2010


details:   http://hg.dovecot.org/dovecot-2.0/rev/183b1b4f6386
changeset: 10944:183b1b4f6386
user:      Timo Sirainen <tss at iki.fi>
date:      Thu Mar 18 04:28:32 2010 +0200
description:
lib-master: Don't assert-crash if client_limit < service_count.

diffstat:

 src/lib-master/master-service.c |  35 ++++++++++++++++++-----------------
 1 files changed, 18 insertions(+), 17 deletions(-)

diffs (55 lines):

diff -r 41ce0172dcc8 -r 183b1b4f6386 src/lib-master/master-service.c
--- a/src/lib-master/master-service.c	Thu Mar 18 04:17:47 2010 +0200
+++ b/src/lib-master/master-service.c	Thu Mar 18 04:28:32 2010 +0200
@@ -541,33 +541,34 @@
 	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) {
-		i_assert(service->service_count_left == (unsigned int)-1);
+	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--;
+
 		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);
 	}
 }
 


More information about the dovecot-cvs mailing list