]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-master: Make sure IO listeners aren't added back while doing auth lookup.
authorTimo Sirainen <tss@iki.fi>
Sat, 20 Feb 2010 16:07:18 +0000 (18:07 +0200)
committerTimo Sirainen <tss@iki.fi>
Sat, 20 Feb 2010 16:07:18 +0000 (18:07 +0200)
--HG--
branch : HEAD

src/lib-master/master-login.c
src/lib-master/master-service-private.h
src/lib-master/master-service.c

index a808c3ff8b607165983c1cf8ecaa8ace2a3a0e40..cdae67f2c1007c628a4695cd4c81644e4be9a5db 100644 (file)
@@ -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);
 }
index e010502aa4df808c82f3008c1be327d22b029f67..b8be76799fb7656d3655b0d737f88b7043fc3313 100644 (file)
@@ -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);
index 77df4731593c3f2801ea195ee0c3e724a7594675..138f72d05eed57a83d0765fcb2d86f31b3e558ec 100644 (file)
@@ -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)