From: Timo Sirainen Date: Sat, 20 Feb 2010 16:07:18 +0000 (+0200) Subject: lib-master: Make sure IO listeners aren't added back while doing auth lookup. X-Git-Tag: 2.0.beta3~4 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3b1bb5fd562be9d1a5f6894b82d2ba0d529cdcb3;p=thirdparty%2Fdovecot%2Fcore.git lib-master: Make sure IO listeners aren't added back while doing auth lookup. --HG-- branch : HEAD --- diff --git a/src/lib-master/master-login.c b/src/lib-master/master-login.c index a808c3ff8b..cdae67f2c1 100644 --- a/src/lib-master/master-login.c +++ b/src/lib-master/master-login.c @@ -399,6 +399,7 @@ void master_login_add(struct master_login *login, int fd) and currently we don't try to accept more connections until this request's authentication is finished, because updating available_count gets tricky. */ + login->service->login_authenticating = TRUE; master_service_io_listeners_remove(login->service); } @@ -415,6 +416,8 @@ static void master_login_conn_deinit(struct master_login_connection **_conn) o_stream_unref(&conn->output); if (close(conn->fd) < 0) i_error("close(master login) failed: %m"); + + conn->login->service->login_authenticating = FALSE; master_service_io_listeners_add(conn->login->service); master_login_conn_unref(&conn); } diff --git a/src/lib-master/master-service-private.h b/src/lib-master/master-service-private.h index e010502aa4..b8be76799f 100644 --- a/src/lib-master/master-service-private.h +++ b/src/lib-master/master-service-private.h @@ -57,6 +57,7 @@ struct master_service { unsigned int call_avail_overflow:1; unsigned int delay_status_updates:1; unsigned int config_path_is_default:1; + unsigned int login_authenticating:1; }; void master_service_io_listeners_add(struct master_service *service); diff --git a/src/lib-master/master-service.c b/src/lib-master/master-service.c index 77df473159..138f72d05e 100644 --- a/src/lib-master/master-service.c +++ b/src/lib-master/master-service.c @@ -735,7 +735,7 @@ void master_service_io_listeners_add(struct master_service *service) { unsigned int i; - if (service->stopping) + if (service->stopping || service->login_authenticating) return; if (service->listeners == NULL)