mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-24 20:33:31 +01:00
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.
This commit is contained in:
parent
7a83cf75dc
commit
72ea4a8f08
@ -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();
|
||||
}
|
||||
|
@ -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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user