25RCSIDH(timer_h,
"$Id: 958abce364a66425157c3efab4647313ea3998b6 $")
31#include <freeradius-devel/util/time.h>
32#include <freeradius-devel/util/talloc.h>
38# error _CONST can only be defined in the local header
80#define fr_timer_at(...) _fr_timer_at(NDEBUG_LOCATION_EXP __VA_ARGS__)
86#define fr_timer_in(...) _fr_timer_in(NDEBUG_LOCATION_EXP __VA_ARGS__)
90#define FR_TIMER_DISARM(_ev) \
92 if (likely((_ev) != NULL) && unlikely(fr_timer_disarm(_ev) < 0)) { \
93 fr_assert_msg(0, "Failed to disarm timer %p", (_ev)); \
97#define FR_TIMER_DISARM_RETURN(_ev) \
98 if ((likely(((_ev)) != NULL) && unlikely(!fr_cond_assert_msg(fr_timer_disarm(_ev) == 0, "Failed to disarm timer %p", (_ev))))) return -1;
102#define FR_TIMER_DELETE(_ev_p) \
104 if ((likely((*(_ev_p)) != NULL) && unlikely(fr_timer_delete(_ev_p) < 0))) { \
105 fr_assert_msg(0, "Failed to delete timer %p", *(_ev_p)); \
109#define FR_TIMER_DELETE_RETURN(_ev_p) \
110 if ((likely((*(_ev_p)) != NULL) && unlikely(!fr_cond_assert_msg(fr_timer_delete(_ev_p) == 0, "Failed to delete timer %p", *(_ev_p))))) return -1;
117#define fr_timer_armed(_ev) ((_ev) && _fr_timer_armed(_ev))
135#ifdef WITH_EVENT_DEBUG
#define NDEBUG_LOCATION_ARGS
Pass caller information to the function.
#define NDEBUG_LOCATION_NONNULL(_num)
struct fr_time_s fr_time_t
"server local" time.
A time delta, a difference in time measured in nanoseconds.
void const * uctx
Context pointer to pass to the callback.
fr_timer_cb_t callback
Callback to execute when the timer fires.
fr_time_t when
When this timer should fire.
bool free_on_fire
Whether to free the event when it fires.
fr_timer_list_t * tl
The event list this timer is part of.
int fr_timer_list_run(fr_timer_list_t *tl, fr_time_t *when)
Execute any pending events in the event loop.
int _fr_timer_in(NDEBUG_LOCATION_ARGS TALLOC_CTX *ctx, fr_timer_list_t *tl, fr_timer_t **ev, fr_time_delta_t delta, bool free_on_fire, fr_timer_cb_t callback, void const *uctx)
int fr_timer_list_disarm(fr_timer_list_t *tl)
Disable all timers in a list.
fr_time_t fr_timer_when(fr_timer_t *ev)
Internal timestamp representing when the timer should fire.
uint64_t fr_timer_list_num_events(fr_timer_list_t *tl)
Return number of pending events.
int _fr_timer_at(NDEBUG_LOCATION_ARGS TALLOC_CTX *ctx, fr_timer_list_t *tl, fr_timer_t **ev, fr_time_t when, bool free_on_fire, fr_timer_cb_t callback, void const *uctx)
fr_time_t fr_timer_list_when(fr_timer_list_t *tl)
Return the time of the next event.
fr_timer_list_t * fr_timer_list_ordered_alloc(TALLOC_CTX *ctx, fr_timer_list_t *parent)
Allocate a new sorted event timer list.
bool _fr_timer_armed(fr_timer_t *ev)
Check if a timer event is armed.
int fr_timer_list_force_run(fr_timer_list_t *tl)
Get the head of the timer list, the event may not be ready to fire.
fr_timer_list_t * fr_timer_list_lst_alloc(TALLOC_CTX *ctx, fr_timer_list_t *parent)
Allocate a new lst based timer list.
int fr_timer_disarm(fr_timer_t *ev)
Remove an event from the event list, but don't free the memory.
void fr_timer_list_set_time_func(fr_timer_list_t *tl, fr_event_time_source_t func)
Override event list time source.
fr_time_t(* fr_event_time_source_t)(void)
Alternative time source, useful for testing.
void(* fr_timer_cb_t)(fr_timer_list_t *tl, fr_time_t now, void *uctx)
Called when a timer event fires.
int fr_timer_delete(fr_timer_t **ev_p)
Delete a timer event and free its memory.
fr_event_time_source_t _CONST time
Time source this list uses to get the current time when calculating deltas (fr_timer_in).
Public event timer list structure.