changeset 6179:5c6af3b74d5f HEAD

If client disconnects in the middle of sending command parameters, don't crash with "command didn't cancel itself" error.
author Timo Sirainen <tss@iki.fi>
date Mon, 06 Aug 2007 19:45:01 +0300
parents 66971adb55e5
children 6b0fe0f93896
files src/imap/client.c
diffstat 1 files changed, 5 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/imap/client.c	Mon Aug 06 19:29:16 2007 +0300
+++ b/src/imap/client.c	Mon Aug 06 19:45:01 2007 +0300
@@ -62,7 +62,7 @@
 
 	cmd->cancel = TRUE;
 	cmd_ret = cmd->func == NULL ? TRUE : cmd->func(cmd);
-	if (!cmd_ret) {
+	if (!cmd_ret && !cmd->param_error) {
 		if (cmd->client->output->closed)
 			i_panic("command didn't cancel itself: %s", cmd->name);
 	} else {
@@ -260,6 +260,10 @@
 		return TRUE;
 	} else if (ret == -2) {
 		/* need more data */
+		if (cmd->client->input->closed) {
+			/* disconnected */
+			cmd->param_error = TRUE;
+		}
 		return FALSE;
 	} else {
 		/* error, or missing arguments */