static void timeout_correct(struct event_base *, struct timeval *);
static void event_signal_closure(struct event_base *, struct event *ev);
-static void event_periodic_closure(struct event_base *, struct event *ev);
static void event_persist_closure(struct event_base *, struct event *ev);
static int evthread_notify_base(struct event_base *base);
return (base->event_count > 0);
}
-static void
-event_periodic_closure(struct event_base *base, struct event *ev)
-{
- event_add(ev, &ev->_ev.ev_periodic.tv_interval);
- (*ev->ev_callback)((int)ev->ev_fd, ev->ev_res, ev->ev_arg);
-}
-
static void
event_persist_closure(struct event_base *base, struct event *ev)
{
assert(event_base_set(base, ev) == 0);
}
-void
-evperiodic_assign(struct event *ev, struct event_base *base,
- const struct timeval *tv,
- void (*cb)(evutil_socket_t, short, void *), void *arg)
-{
- event_assign(ev, base, -1, EV_TIMEOUT, cb, arg);
-
- ev->_ev.ev_periodic.tv_interval = *tv;
- ev->ev_closure = event_periodic_closure;
-}
-
struct event *
event_new(struct event_base *base, evutil_socket_t fd, short events, void (*cb)(evutil_socket_t, short, void *), void *arg)
{
*/
int event_base_loopbreak(struct event_base *);
-/**
- Define a periodic timer.
-
- Behaves like a timer only that it repeats at the specified interval.
- To start this time, it needs to be added via event_add().
-
- @param ev event struct to be modified
- @param base the event base to which this event belongs
- @param tv periodicity interval
- @param cb callback function
- @param arg argument that will be passed to the callback function
-*/
-
-void evperiodic_assign(struct event *ev, struct event_base *base,
- const struct timeval *tv, void (*cb)(int, short, void *), void *arg);
-
/* Flags to pass to event_set(), event_new(), event_assign(),
* event_pending(), and anything else with an argument of the form
* "short events" */
}
}
-static void
-test_periodictimeout(void)
-{
- struct timeval tv, tv_interval;
- struct event ev;
- int count = 0;
-
- setup_test("Periodic timeout: ");
-
- timerclear(&tv_interval);
- tv_interval.tv_usec = 10000;
-
- tv.tv_usec = 0;
- tv.tv_sec = 0;
- evperiodic_assign(&ev, global_base, &tv_interval,
- periodic_timeout_cb, &count);
- event_add(&ev, &tv);
-
- event_dispatch();
-
- event_del(&ev);
-
- cleanup_test();
-}
-
static void
test_persistent_timeout(void)
{
test_evutil_snprintf();
util_suite();
- test_periodictimeout();
test_persistent_timeout();
/* use the global event base and need to be called first */