From 47854a802a575b44291d27e4b57199942106cf62 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Mon, 28 Dec 2009 01:40:37 -0500 Subject: [PATCH] Expose our cached gettimeofday value with a new interface I've got a two use case that wants this for a fairly sensible purpose: one external and on internal. --- event.c | 16 ++++++++++++++++ include/event2/event.h | 14 ++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/event.c b/event.c index aa8d5ce5..2c830cee 100644 --- a/event.c +++ b/event.c @@ -180,6 +180,22 @@ gettime(struct event_base *base, struct timeval *tp) return (evutil_gettimeofday(tp, NULL)); } +int +event_base_gettimeofday_cached(struct event_base *base, struct timeval *tv) +{ + int r; + if (!base) { + base = current_base; + if (!current_base) + return evutil_gettimeofday(tv, NULL); + } + + EVBASE_ACQUIRE_LOCK(base, th_base_lock); + r = gettime(base, tv); + EVBASE_RELEASE_LOCK(base, th_base_lock); + return r; +} + static inline void clear_time_cache(struct event_base *base) { diff --git a/include/event2/event.h b/include/event2/event.h index 6cc83d49..489026a6 100644 --- a/include/event2/event.h +++ b/include/event2/event.h @@ -671,6 +671,20 @@ void event_set_mem_functions(void *(*malloc_fn)(size_t sz), void event_base_dump_events(struct event_base *, FILE *); +/** Sets 'tv' to the current time (as returned by gettimeofday()), + looking at the cached value in 'base' if possible, and calling + gettimeofday() or clock_gettime() as appropriate if there is no + cached time. + + Generally, this value will only be cached while actually + processing event callbacks, and may be very inaccuate if your + callbacks take a long time to execute. + + Returns 0 on success, negative on failure. + */ +int event_base_gettimeofday_cached(struct event_base *base, + struct timeval *tv); + #ifdef __cplusplus } #endif -- 2.40.0