diff --git a/src/lib/ioloop.c b/src/lib/ioloop.c index ebf1ec1630..d524a0af29 100644 --- a/src/lib/ioloop.c +++ b/src/lib/ioloop.c @@ -15,8 +15,9 @@ time_t ioloop_time = 0; struct timeval ioloop_timeval; - struct ioloop *current_ioloop = NULL; +uint64_t ioloop_global_wait_usecs = 0; + static ARRAY(io_switch_callback_t *) io_switch_callbacks = ARRAY_INIT; static void io_loop_initialize_handler(struct ioloop *ioloop) @@ -524,8 +525,10 @@ static void io_loop_handle_timeouts_real(struct ioloop *ioloop) ioloop->time_moved_callback(ioloop->next_max_time, ioloop_timeval.tv_sec); } - ioloop->ioloop_wait_usecs += + long long diff = timeval_diff_usecs(&ioloop_timeval, &prev_ioloop_timeval); + ioloop->ioloop_wait_usecs += diff; + ioloop_global_wait_usecs += diff; } ioloop_time = ioloop_timeval.tv_sec; diff --git a/src/lib/ioloop.h b/src/lib/ioloop.h index 4db2903482..c33d841064 100644 --- a/src/lib/ioloop.h +++ b/src/lib/ioloop.h @@ -41,6 +41,8 @@ extern time_t ioloop_time; extern struct timeval ioloop_timeval; extern struct ioloop *current_ioloop; +/* Number of microseconds spent on all the ioloops waiting for themselves. */ +extern uint64_t ioloop_global_wait_usecs; /* You can create different handlers for IO_READ and IO_WRITE. IO_READ and IO_ERROR can't use different handlers (and there's no point anyway).