]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-auth: Previous changes didn't set the current ioloop correctly, causing problems.
authorTimo Sirainen <tss@iki.fi>
Mon, 5 Aug 2013 19:15:08 +0000 (22:15 +0300)
committerTimo Sirainen <tss@iki.fi>
Mon, 5 Aug 2013 19:15:08 +0000 (22:15 +0300)
src/lib-auth/auth-master.c

index a6cae0c94f3ca62d51f58a3ada3730dfc337418d..3a7d35742141c7520b0eec945d40da6df71a6e67 100644 (file)
@@ -287,7 +287,9 @@ static void auth_input(struct auth_master_connection *conn)
 
        while ((line = i_stream_next_line(conn->input)) != NULL) {
                T_BEGIN {
+                       io_loop_set_current(conn->prev_ioloop);
                        ret = auth_handle_line(conn, line);
+                       io_loop_set_current(conn->ioloop);
                } T_END;
                if (!ret)
                        return;
@@ -369,6 +371,7 @@ static void auth_master_unset_io(struct auth_master_connection *conn)
                if (conn->prev_ioloop == NULL)
                        auth_connection_close(conn);
                else {
+                       i_assert(conn->to == NULL);
                        conn->to = timeout_add(1000*AUTH_MASTER_IDLE_SECS,
                                               auth_idle_timeout, conn);
                }
@@ -682,6 +685,7 @@ auth_master_user_list_init(struct auth_master_connection *conn,
 
        if (auth_master_run_cmd_pre(conn, str_c(str)) < 0)
                ctx->failed = TRUE;
+       io_loop_set_current(conn->prev_ioloop);
        conn->prefix = DEFAULT_USERDB_LOOKUP_PREFIX;
        return ctx;
 }
@@ -701,7 +705,9 @@ const char *auth_master_user_list_next(struct auth_master_user_list_ctx *ctx)
                } T_END;
        } else {
                /* wait for more data */
+               io_loop_set_current(ctx->conn->ioloop);
                io_loop_run(ctx->conn->ioloop);
+               io_loop_set_current(ctx->conn->prev_ioloop);
        }
 
        if (ctx->finished || ctx->failed)