From: Aki Tuomi Date: Tue, 20 Nov 2018 12:54:43 +0000 (+0200) Subject: lib: connection - stop idle timeout when input is halted X-Git-Tag: 2.3.9~1070 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=da0051320302b43db2c994cbd981afcd53870e23;p=thirdparty%2Fdovecot%2Fcore.git lib: connection - stop idle timeout when input is halted Otherwise the client might get disconnected for wrong reason. --- diff --git a/src/lib/connection.c b/src/lib/connection.c index 05fb0f6e2c..4255ff9794 100644 --- a/src/lib/connection.c +++ b/src/lib/connection.c @@ -123,6 +123,7 @@ int connection_input_line_default(struct connection *conn, const char *line) void connection_input_halt(struct connection *conn) { io_remove(&conn->io); + timeout_remove(&conn->to); } void connection_input_resume(struct connection *conn) @@ -140,6 +141,11 @@ void connection_input_resume(struct connection *conn) conn->io = io_add_to(conn->ioloop, conn->fd_in, IO_READ, *conn->list->v.input, conn); } + if (conn->input_idle_timeout_secs != 0) { + conn->to = timeout_add_to(conn->ioloop, + conn->input_idle_timeout_secs*1000, + *conn->list->v.idle_timeout, conn); + } } static void connection_init_streams(struct connection *conn) @@ -176,12 +182,9 @@ static void connection_init_streams(struct connection *conn) o_stream_switch_ioloop_to(conn->output, conn->ioloop); } conn->disconnected = FALSE; + i_assert(conn->to == NULL); connection_input_resume(conn); - if (conn->input_idle_timeout_secs != 0) { - conn->to = timeout_add_to(conn->ioloop, - conn->input_idle_timeout_secs*1000, - *conn->list->v.idle_timeout, conn); - } + i_assert(conn->to != NULL || conn->input_idle_timeout_secs == 0); if (set->major_version != 0 && !set->dont_send_version) { e_debug(conn->event, "Sending version handshake"); o_stream_nsend_str(conn->output, t_strdup_printf(