From: Timo Sirainen Date: Thu, 29 Oct 2020 10:52:16 +0000 (+0200) Subject: imap: Move disconnected-check inside client_continue_pending_input() X-Git-Tag: 2.3.13~16 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1c56defb079d7e48341c2785278c6fc1201bb5dc;p=thirdparty%2Fdovecot%2Fcore.git imap: Move disconnected-check inside client_continue_pending_input() This way all of its callers don't have to check if the client is disconnected. --- diff --git a/src/imap/cmd-append.c b/src/imap/cmd-append.c index c7b5435b0b..84ceb61fea 100644 --- a/src/imap/cmd-append.c +++ b/src/imap/cmd-append.c @@ -122,10 +122,7 @@ static void client_input_append(struct client_command_context *cmd) cmd_sync_delayed(client); o_stream_uncork(client->output); - if (client->disconnected) - client_destroy(client, NULL); - else - client_continue_pending_input(client); + client_continue_pending_input(client); } static void cmd_append_finish(struct cmd_append_context *ctx) diff --git a/src/imap/cmd-idle.c b/src/imap/cmd-idle.c index e5783c2a0d..2b31dc714e 100644 --- a/src/imap/cmd-idle.c +++ b/src/imap/cmd-idle.c @@ -101,12 +101,8 @@ static void idle_client_input(struct cmd_idle_context *ctx) { struct client *client = ctx->client; - if (idle_client_input_more(ctx)) { - if (client->disconnected) - client_destroy(client, NULL); - else - client_continue_pending_input(client); - } + if (idle_client_input_more(ctx)) + client_continue_pending_input(client); } static void keepalive_timeout(struct cmd_idle_context *ctx) diff --git a/src/imap/imap-client.c b/src/imap/imap-client.c index 22443624fe..e617979738 100644 --- a/src/imap/imap-client.c +++ b/src/imap/imap-client.c @@ -1093,6 +1093,11 @@ void client_continue_pending_input(struct client *client) { i_assert(!client->handling_input); + if (client->disconnected) { + client_destroy(client, NULL); + return; + } + /* this function is called at the end of I/O callbacks (and only there). fix up the command states and verify that they're correct. */ while (client_remove_pending_unambiguity(client)) { @@ -1377,10 +1382,7 @@ void client_input(struct client *client) o_stream_unref(&output); imap_refresh_proctitle(); - if (client->disconnected) - client_destroy(client, NULL); - else - client_continue_pending_input(client); + client_continue_pending_input(client); } static void client_output_cmd(struct client_command_context *cmd) diff --git a/src/imap/imap-search.c b/src/imap/imap-search.c index bb0f9deacd..8b5d660109 100644 --- a/src/imap/imap-search.c +++ b/src/imap/imap-search.c @@ -482,10 +482,7 @@ static void cmd_search_more_callback(struct client_command_context *cmd) client_command_free(&cmd); cmd_sync_delayed(client); - if (client->disconnected) - client_destroy(client, NULL); - else - client_continue_pending_input(client); + client_continue_pending_input(client); } int cmd_search_parse_return_if_found(struct imap_search_context *ctx, diff --git a/src/imap/main.c b/src/imap/main.c index 776ad53b1f..90a4cf1d29 100644 --- a/src/imap/main.c +++ b/src/imap/main.c @@ -227,10 +227,7 @@ client_add_input_finalize(struct client *client) /* we could have already handled LOGOUT, or we might need to continue pending ambiguous commands. */ - if (client->disconnected) - client_destroy(client, NULL); - else - client_continue_pending_input(client); + client_continue_pending_input(client); } int client_create_from_input(const struct mail_storage_service_input *input,