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) {