changeset 21107:8fe5614ccc3c

dict-client: Use io_wait_timer for tracking wait times. This way the "dict wait" time includes all ioloop waits that wait on the dict-client, not just in dict_wait().
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Tue, 15 Nov 2016 11:41:53 +0100
parents 97386e9e8c13
children 1a1310a5f7a8
files src/lib-dict/dict-client.c
diffstat 1 files changed, 6 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-dict/dict-client.c	Tue Nov 15 11:21:56 2016 +0100
+++ b/src/lib-dict/dict-client.c	Tue Nov 15 11:41:53 2016 +0100
@@ -72,6 +72,7 @@
 	char *last_connect_error;
 
 	struct ioloop *ioloop, *prev_ioloop;
+	struct io_wait_timer *wait_timer;
 	struct timeout *to_requests;
 	struct timeout *to_idle;
 	unsigned int idle_msecs;
@@ -136,7 +137,7 @@
 	cmd->query = i_strdup(query);
 	cmd->start_time = ioloop_timeval;
 	cmd->start_global_ioloop_usecs = ioloop_global_wait_usecs;
-	cmd->start_dict_ioloop_usecs = io_loop_get_wait_usecs(dict->ioloop);
+	cmd->start_dict_ioloop_usecs = io_wait_timer_get_usecs(dict->wait_timer);
 	cmd->start_lock_usecs = file_lock_wait_get_total_usecs();
 	return cmd;
 }
@@ -661,6 +662,7 @@
 	dict->uri = i_strdup(dest_uri + 1);
 
 	dict->ioloop = io_loop_create();
+	dict->wait_timer = io_wait_timer_add();
 	io_loop_set_current(old_ioloop);
 	*dict_r = &dict->dict;
 	return 0;
@@ -673,6 +675,7 @@
 
 	client_dict_disconnect(dict, "Deinit");
 	connection_deinit(&dict->conn.conn);
+	io_wait_timer_remove(&dict->wait_timer);
 
 	i_assert(dict->transactions == NULL);
 	i_assert(array_count(&dict->cmds) == 0);
@@ -715,6 +718,7 @@
 {
 	struct client_dict *dict = (struct client_dict *)_dict;
 
+	dict->wait_timer = io_wait_timer_move(&dict->wait_timer);
 	if (dict->to_idle != NULL)
 		dict->to_idle = io_loop_move_timeout(&dict->to_idle);
 	if (dict->to_requests != NULL)
@@ -727,7 +731,7 @@
 {
 	int global_ioloop_msecs = (ioloop_global_wait_usecs -
 				   cmd->start_global_ioloop_usecs + 999) / 1000;
-	int dict_ioloop_msecs = (io_loop_get_wait_usecs(cmd->dict->ioloop) -
+	int dict_ioloop_msecs = (io_wait_timer_get_usecs(cmd->dict->wait_timer) -
 				 cmd->start_dict_ioloop_usecs + 999) / 1000;
 	int other_ioloop_msecs = global_ioloop_msecs - dict_ioloop_msecs;
 	int lock_msecs = (file_lock_wait_get_total_usecs() -