dovecot-2.2: imap: If IDLE or FETCH notices a disconnection, log...

dovecot at dovecot.org dovecot at dovecot.org
Thu Nov 12 10:29:30 UTC 2015


details:   http://hg.dovecot.org/dovecot-2.2/rev/4c8f7316a659
changeset: 19356:4c8f7316a659
user:      Timo Sirainen <tss at iki.fi>
date:      Thu Nov 12 12:28:58 2015 +0200
description:
imap: If IDLE or FETCH notices a disconnection, log the running command statistics.

diffstat:

 src/imap/cmd-fetch.c   |   2 +-
 src/imap/cmd-idle.c    |   2 +-
 src/imap/imap-client.c |  24 ++++++++++++++----------
 3 files changed, 16 insertions(+), 12 deletions(-)

diffs (77 lines):

diff -r 5aba08de8b2f -r 4c8f7316a659 src/imap/cmd-fetch.c
--- a/src/imap/cmd-fetch.c	Thu Nov 12 12:17:04 2015 +0200
+++ b/src/imap/cmd-fetch.c	Thu Nov 12 12:28:58 2015 +0200
@@ -192,7 +192,7 @@
 		const char *errstr;
 
 		if (cmd->client->output->closed) {
-			client_disconnect(cmd->client, "Disconnected");
+			client_disconnect(cmd->client, NULL);
 			return TRUE;
 		}
 
diff -r 5aba08de8b2f -r 4c8f7316a659 src/imap/cmd-idle.c
--- a/src/imap/cmd-idle.c	Thu Nov 12 12:17:04 2015 +0200
+++ b/src/imap/cmd-idle.c	Thu Nov 12 12:28:58 2015 +0200
@@ -82,7 +82,7 @@
 	switch (i_stream_read(client->input)) {
 	case -1:
 		/* disconnected */
-		client_disconnect(client, "Disconnected in IDLE");
+		client_disconnect(client, NULL);
 		return;
 	case -2:
 		client->input_skip_line = TRUE;
diff -r 5aba08de8b2f -r 4c8f7316a659 src/imap/imap-client.c
--- a/src/imap/imap-client.c	Thu Nov 12 12:17:04 2015 +0200
+++ b/src/imap/imap-client.c	Thu Nov 12 12:28:58 2015 +0200
@@ -301,22 +301,28 @@
 	return str_c(str);
 }
 
+static void client_log_disconnect(struct client *client, const char *reason)
+{
+	const char *cmd_status = "";
+
+	if (reason == NULL) {
+		reason = io_stream_get_disconnect_reason(client->input,
+							 client->output);
+		cmd_status = client_get_commands_status(client);
+	}
+	i_info("%s%s %s", reason, cmd_status, client_stats(client));
+}
+
 static void client_default_destroy(struct client *client, const char *reason)
 {
 	struct client_command_context *cmd;
-	const char *cmd_status = "";
 
 	i_assert(!client->destroyed);
 	client->destroyed = TRUE;
 
 	if (!client->disconnected) {
 		client->disconnected = TRUE;
-		if (reason == NULL) {
-			reason = io_stream_get_disconnect_reason(client->input,
-								 client->output);
-			cmd_status = client_get_commands_status(client);
-		}
-		i_info("%s%s %s", reason, cmd_status, client_stats(client));
+		client_log_disconnect(client, reason);
 	}
 
 	i_stream_close(client->input);
@@ -391,12 +397,10 @@
 
 void client_disconnect(struct client *client, const char *reason)
 {
-	i_assert(reason != NULL);
-
 	if (client->disconnected)
 		return;
 
-	i_info("Disconnected: %s %s", reason, client_stats(client));
+	client_log_disconnect(client, reason);
 	client->disconnected = TRUE;
 	o_stream_nflush(client->output);
 	o_stream_uncork(client->output);


More information about the dovecot-cvs mailing list