diff options
author | Nick Mathewson <nickm@torproject.org> | 2018-05-09 12:37:47 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2018-05-10 09:01:27 -0400 |
commit | 80f582ae1841d262edd7f55260f350d949294c0c (patch) | |
tree | 38f285a39ad6b398a1b5ead580a97c3a8139a896 /src/common | |
parent | fa7847e450ee9884eda6236b50ea0d59db3efaba (diff) | |
download | tor-80f582ae1841d262edd7f55260f350d949294c0c.tar.gz tor-80f582ae1841d262edd7f55260f350d949294c0c.zip |
Add functions to enable/disable periodic_event_t objects.
Diffstat (limited to 'src/common')
-rw-r--r-- | src/common/compat_libevent.c | 31 | ||||
-rw-r--r-- | src/common/compat_libevent.h | 2 |
2 files changed, 32 insertions, 1 deletions
diff --git a/src/common/compat_libevent.c b/src/common/compat_libevent.c index fa00fb836b..cf3b7298c2 100644 --- a/src/common/compat_libevent.c +++ b/src/common/compat_libevent.c @@ -253,10 +253,39 @@ periodic_timer_new(struct event_base *base, } timer->cb = cb; timer->data = data; - event_add(timer->ev, (struct timeval *)tv); /*drop const for old libevent*/ + periodic_timer_launch(timer, tv); return timer; } +/** + * Launch the timer <b>timer</b> to run at <b>tv</b> from now, and every + * <b>tv</b> thereafter. + * + * If the timer is already enabled, this function does nothing. + */ +void +periodic_timer_launch(periodic_timer_t *timer, const struct timeval *tv) +{ + tor_assert(timer); + if (event_pending(timer->ev, EV_TIMEOUT, NULL)) + return; + event_add(timer->ev, (struct timeval *)tv); /*drop const for old libevent*/ +} + +/** + * Disable the provided <b>timer</b>, but do not free it. + * + * You can reenable the same timer later with periodic_timer_launch. + * + * If the timer is already disabled, this function does nothing. + */ +void +periodic_timer_disable(periodic_timer_t *timer) +{ + tor_assert(timer); + event_del(timer->ev); +} + /** Stop and free a periodic timer */ void periodic_timer_free_(periodic_timer_t *timer) diff --git a/src/common/compat_libevent.h b/src/common/compat_libevent.h index e2747860a9..286a268122 100644 --- a/src/common/compat_libevent.h +++ b/src/common/compat_libevent.h @@ -31,6 +31,8 @@ periodic_timer_t *periodic_timer_new(struct event_base *base, void (*cb)(periodic_timer_t *timer, void *data), void *data); void periodic_timer_free_(periodic_timer_t *); +void periodic_timer_launch(periodic_timer_t *, const struct timeval *tv); +void periodic_timer_disable(periodic_timer_t *); #define periodic_timer_free(t) \ FREE_AND_NULL(periodic_timer_t, periodic_timer_free_, (t)) |