From 72ea4a8f081318c60c460cef5d9daf55e399c434 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Mon, 11 Sep 2017 13:48:39 -0400 Subject: [PATCH] Extract the important parts of the run-pending-timers function. Our unit tests will need this, so that they can simulate advancing time without getting libevent involved. --- src/common/timers.c | 26 ++++++++++++++++++-------- src/common/timers.h | 4 ++++ 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/common/timers.c b/src/common/timers.c index 6f4a6c30f..c43c49c08 100644 --- a/src/common/timers.c +++ b/src/common/timers.c @@ -29,6 +29,8 @@ #include "orconfig.h" +#define TOR_TIMERS_PRIVATE + #include "compat.h" #include "compat_libevent.h" #include "timers.h" @@ -148,6 +150,21 @@ libevent_timer_reschedule(void) event_add(global_timer_event, &d); } +/** Run the callback of every timer that has expired, based on the current + * output of monotime_get(). */ +STATIC void +timers_run_pending(void) +{ + monotime_t now; + monotime_get(&now); + timer_advance_to_cur_time(&now); + + tor_timer_t *t; + while ((t = timeouts_get(global_timeouts))) { + t->callback.cb(t, t->callback.arg, &now); + } +} + /** * Invoked when the libevent timer has expired: see which tor_timer_t events * have fired, activate their callbacks, and reschedule the libevent timer. @@ -159,14 +176,7 @@ libevent_timer_callback(evutil_socket_t fd, short what, void *arg) (void)what; (void)arg; - monotime_t now; - monotime_get(&now); - timer_advance_to_cur_time(&now); - - tor_timer_t *t; - while ((t = timeouts_get(global_timeouts))) { - t->callback.cb(t, t->callback.arg, &now); - } + timers_run_pending(); libevent_timer_reschedule(); } diff --git a/src/common/timers.h b/src/common/timers.h index e816630e6..d9602cd2a 100644 --- a/src/common/timers.h +++ b/src/common/timers.h @@ -22,5 +22,9 @@ void timer_free(tor_timer_t *t); void timers_initialize(void); void timers_shutdown(void); +#ifdef TOR_TIMERS_PRIVATE +STATIC void timers_run_pending(void); +#endif + #endif