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);
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;
}
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;
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)
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;
}