From: Timo Sirainen Date: Mon, 21 Nov 2016 16:52:25 +0000 (+0200) Subject: dict: Moved iterate's corking to more correct location. X-Git-Tag: 2.2.27~87 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a9d14bb8ea285b0aa73bec3faeece5117cc1b59f;p=thirdparty%2Fdovecot%2Fcore.git dict: Moved iterate's corking to more correct location. Commands' input handling already corks ostream in connection.c. --- diff --git a/src/dict/dict-commands.c b/src/dict/dict-commands.c index e5dc691ab9..b39a0200a6 100644 --- a/src/dict/dict-commands.c +++ b/src/dict/dict-commands.c @@ -157,7 +157,6 @@ static int cmd_iterate_flush(struct dict_connection_cmd *cmd) const char *key, *value; str = t_str_new(256); - o_stream_cork(cmd->conn->output); while (dict_iterate(cmd->iter, &key, &value)) { str_truncate(str, 0); str_append_c(str, DICT_PROTOCOL_REPLY_OK); @@ -173,7 +172,6 @@ static int cmd_iterate_flush(struct dict_connection_cmd *cmd) if (o_stream_flush(cmd->conn->output) <= 0) { /* continue later when there's more space in output buffer */ - o_stream_uncork(cmd->conn->output); o_stream_set_flush_pending(cmd->conn->output, TRUE); return 0; } @@ -190,7 +188,6 @@ static int cmd_iterate_flush(struct dict_connection_cmd *cmd) str_append_c(str, DICT_PROTOCOL_REPLY_FAIL); dict_cmd_reply_handle_timings(cmd, str, cmd_stats.iterations); str_append_c(str, '\n'); - o_stream_uncork(cmd->conn->output); cmd->reply = i_strdup(str_c(str)); return 1; @@ -199,8 +196,13 @@ static int cmd_iterate_flush(struct dict_connection_cmd *cmd) static void cmd_iterate_callback(void *context) { struct dict_connection_cmd *cmd = context; + struct dict_connection *conn = cmd->conn; + dict_connection_ref(conn); + o_stream_cork(conn->output); dict_connection_cmd_output_more(cmd); + o_stream_uncork(conn->output); + dict_connection_unref_safe(conn); } static int cmd_iterate(struct dict_connection_cmd *cmd, const char *line) diff --git a/src/dict/dict-connection.c b/src/dict/dict-connection.c index 318b0741a6..518222f8bf 100644 --- a/src/dict/dict-connection.c +++ b/src/dict/dict-connection.c @@ -179,14 +179,17 @@ void dict_connection_continue_input(struct dict_connection *conn) static int dict_connection_output(struct dict_connection *conn) { + struct ostream *output = conn->output; int ret; + o_stream_cork(output); if ((ret = o_stream_flush(conn->output)) < 0) { dict_connection_destroy(conn); - return 1; - } - if (ret > 0) + ret = 1; + } else if (ret > 0) { dict_connection_cmds_output_more(conn); + } + o_stream_uncork(output); return ret; }