diff options
author | Nick Mathewson <nickm@torproject.org> | 2009-12-28 01:40:37 -0500 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2009-12-28 16:11:18 -0500 |
commit | 47854a802a575b44291d27e4b57199942106cf62 (patch) | |
tree | 1439d1b0a573fed80475b29bf5b3a2a24221332f | |
parent | 5a43df82b89f5f396d845ced49b9f3f65dee52ab (diff) | |
download | libevent-47854a802a575b44291d27e4b57199942106cf62.tar.gz |
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.
-rw-r--r-- | event.c | 16 | ||||
-rw-r--r-- | include/event2/event.h | 14 |
2 files changed, 30 insertions, 0 deletions
@@ -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 |