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