summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2009-12-28 01:40:37 -0500
committerNick Mathewson <nickm@torproject.org>2009-12-28 16:11:18 -0500
commit47854a802a575b44291d27e4b57199942106cf62 (patch)
tree1439d1b0a573fed80475b29bf5b3a2a24221332f
parent5a43df82b89f5f396d845ced49b9f3f65dee52ab (diff)
downloadlibevent-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.c16
-rw-r--r--include/event2/event.h14
2 files changed, 30 insertions, 0 deletions
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