]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
imapc: If command times out, reconnect and retry if possible.
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Sun, 24 Jan 2016 18:07:58 +0000 (20:07 +0200)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Sun, 24 Jan 2016 18:07:58 +0000 (20:07 +0200)
src/lib-imap-client/imapc-connection.c

index 4368c3e64f902f59866504d13fa4cc85425bbbab..4be4cdae075295dc5224342751ab9788ec3e2eb4 100644 (file)
@@ -1789,13 +1789,26 @@ static void imapc_command_timeout(struct imapc_connection *conn)
 {
        struct imapc_command *const *cmds;
        unsigned int count;
+       string_t *str = t_str_new(128);
+       bool reconnect = imapc_connection_can_reconnect(conn);
 
        cmds = array_get(&conn->cmd_wait_list, &count);
        i_assert(count > 0);
 
-       i_error("imapc(%s): Command '%s' timed out, disconnecting",
-               conn->name, imapc_command_get_readable(cmds[0]));
-       imapc_connection_disconnect(conn);
+       str_printfa(str, "imapc(%s): Command '%s' timed out, ",
+                   conn->name, imapc_command_get_readable(cmds[0]));
+       if (reconnect)
+               str_append(str, "reconnecting");
+       else
+               str_append(str, "disconnecting");
+
+       if (reconnect) {
+               i_warning("%s", str_c(str));
+               imapc_connection_reconnect(conn);
+       } else {
+               i_error("%s", str_c(str));
+               imapc_connection_disconnect(conn);
+       }
 }
 
 static bool