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