]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Add functions to enable/disable periodic_event_t objects.
authorNick Mathewson <nickm@torproject.org>
Wed, 9 May 2018 16:37:47 +0000 (12:37 -0400)
committerNick Mathewson <nickm@torproject.org>
Thu, 10 May 2018 13:01:27 +0000 (09:01 -0400)
src/common/compat_libevent.c
src/common/compat_libevent.h

index fa00fb836bd468fd3220ff9b906ad908fc8498d4..cf3b7298c275cedb36350dbd5891c8c023185c6c 100644 (file)
@@ -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)
index e2747860a9bbc3c2e275fc423e44ed1bef0edc70..286a2681227ee7c01d610db8c1a1512c6d88622e 100644 (file)
@@ -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))