tor

The Tor anonymity network
git clone https://git.dasho.dev/tor.git
Log | Files | Refs | README | LICENSE

commit 72ea4a8f081318c60c460cef5d9daf55e399c434
parent 7a83cf75dc55dbac91ff5c0daf7c7418493cbea7
Author: Nick Mathewson <nickm@torproject.org>
Date:   Mon, 11 Sep 2017 13:48:39 -0400

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.

Diffstat:
Msrc/common/timers.c | 26++++++++++++++++++--------
Msrc/common/timers.h | 4++++
2 files changed, 22 insertions(+), 8 deletions(-)

diff --git 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 @@ -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