dovecot-2.2: imap: When client disconnects during a running comm...

dovecot at dovecot.org dovecot at dovecot.org
Thu Nov 12 10:18:36 UTC 2015


details:   http://hg.dovecot.org/dovecot-2.2/rev/5aba08de8b2f
changeset: 19355:5aba08de8b2f
user:      Timo Sirainen <tss at iki.fi>
date:      Thu Nov 12 12:17:04 2015 +0200
description:
imap: When client disconnects during a running command, log the IO input/output wait status.
This is mainly useful for debugging to make sure that the hang isn't
happening because of a bug (missing io) in Dovecot.

diffstat:

 src/imap/imap-client.c |  16 ++++++++++++++--
 1 files changed, 14 insertions(+), 2 deletions(-)

diffs (37 lines):

diff -r 2f3b58470752 -r 5aba08de8b2f src/imap/imap-client.c
--- a/src/imap/imap-client.c	Thu Nov 12 12:14:20 2015 +0200
+++ b/src/imap/imap-client.c	Thu Nov 12 12:17:04 2015 +0200
@@ -261,6 +261,8 @@
 	uint64_t running_usecs = 0, ioloop_wait_usecs;
 	unsigned long long bytes_in = 0, bytes_out = 0;
 	string_t *str;
+	enum io_condition cond;
+	const char *cond_str;
 
 	if (client->command_queue == NULL)
 		return "";
@@ -276,12 +278,22 @@
 		bytes_out += cmd->bytes_out;
 	}
 
+	cond = io_loop_find_fd_conditions(current_ioloop, client->fd_out);
+	if ((cond & (IO_READ | IO_WRITE)) != 0)
+		cond_str = "input/output";
+	else if ((cond & IO_READ) != 0)
+		cond_str = "input";
+	else if ((cond & IO_WRITE) != 0)
+		cond_str = "output";
+	else
+		cond_str = "nothing";
+
 	ioloop_wait_usecs = io_loop_get_wait_usecs(current_ioloop);
 	msecs_in_ioloop = (ioloop_wait_usecs -
 		client->command_queue->start_ioloop_wait_usecs + 999) / 1000;
-	str_printfa(str, " running for %d.%03d + waiting for %d.%03d secs",
+	str_printfa(str, " running for %d.%03d + waiting %s for %d.%03d secs",
 		    (int)((running_usecs+999)/1000 / 1000),
-		    (int)((running_usecs+999)/1000 % 1000),
+		    (int)((running_usecs+999)/1000 % 1000), cond_str,
 		    msecs_in_ioloop / 1000, msecs_in_ioloop % 1000);
 	str_printfa(str, ", %llu B in + %llu+%"PRIuSIZE_T" B out)",
 		    bytes_in, bytes_out,


More information about the dovecot-cvs mailing list