aboutsummaryrefslogtreecommitdiff
path: root/src/common/compat_libevent.c
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2018-05-09 12:37:47 -0400
committerNick Mathewson <nickm@torproject.org>2018-05-10 09:01:27 -0400
commit80f582ae1841d262edd7f55260f350d949294c0c (patch)
tree38f285a39ad6b398a1b5ead580a97c3a8139a896 /src/common/compat_libevent.c
parentfa7847e450ee9884eda6236b50ea0d59db3efaba (diff)
downloadtor-80f582ae1841d262edd7f55260f350d949294c0c.tar.gz
tor-80f582ae1841d262edd7f55260f350d949294c0c.zip
Add functions to enable/disable periodic_event_t objects.
Diffstat (limited to 'src/common/compat_libevent.c')
-rw-r--r--src/common/compat_libevent.c31
1 files changed, 30 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)