Mercurial > dovecot > core-2.2
changeset 5431:712409f6d4d3 HEAD
crashfix
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 26 Mar 2007 19:59:06 +0300 |
parents | c8bb83980ff7 |
children | 2b4fa90860dd |
files | src/imap/cmd-idle.c |
diffstat | 1 files changed, 8 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/imap/cmd-idle.c Mon Mar 26 19:42:09 2007 +0300 +++ b/src/imap/cmd-idle.c Mon Mar 26 19:59:06 2007 +0300 @@ -29,7 +29,8 @@ static bool cmd_idle_continue(struct client_command_context *cmd); -static void idle_finish(struct cmd_idle_context *ctx, bool done_ok) +static void +idle_finish(struct cmd_idle_context *ctx, bool done_ok, bool free_cmd) { struct client *client = ctx->client; @@ -62,7 +63,8 @@ client_send_tagline(ctx->cmd, "BAD Expected DONE."); o_stream_uncork(client->output); - client_command_free(ctx->cmd); + if (free_cmd) + client_command_free(ctx->cmd); client_continue_pending_input(client); } @@ -80,7 +82,7 @@ return; case -2: client->input_skip_line = TRUE; - idle_finish(ctx, FALSE); + idle_finish(ctx, FALSE, TRUE); return; } @@ -95,7 +97,7 @@ if (client->input_skip_line) client->input_skip_line = FALSE; else { - idle_finish(ctx, strcmp(line, "DONE") == 0); + idle_finish(ctx, strcmp(line, "DONE") == 0, TRUE); break; } } @@ -163,7 +165,7 @@ struct cmd_idle_context *ctx = cmd->context; if (cmd->cancel) { - idle_finish(ctx, FALSE); + idle_finish(ctx, FALSE, FALSE); return TRUE; } @@ -211,7 +213,7 @@ } if (client->output->closed) { - idle_finish(ctx, FALSE); + idle_finish(ctx, FALSE, FALSE); return TRUE; } if (client->io == NULL) {