diff options
author | Nick Mathewson <nickm@torproject.org> | 2012-04-06 04:33:19 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2012-05-09 12:05:53 -0400 |
commit | ae2b84b2575be93d0aebba5c0b78453836f89f3c (patch) | |
tree | d72145bcb64a0556560e07181828821ebc180a3e /defer-internal.h | |
parent | fec8bae2673966325eeaabc3fc1af60b584abb1a (diff) | |
download | libevent-ae2b84b2575be93d0aebba5c0b78453836f89f3c.tar.gz |
Replace deferred_cbs with event_callback-based implementation.
Diffstat (limited to 'defer-internal.h')
-rw-r--r-- | defer-internal.h | 56 |
1 files changed, 10 insertions, 46 deletions
diff --git a/defer-internal.h b/defer-internal.h index 114a9dc2..a4c88135 100644 --- a/defer-internal.h +++ b/defer-internal.h @@ -35,43 +35,11 @@ extern "C" { #include <sys/queue.h> -struct deferred_cb; +#define deferred_cb event_callback +#define deferred_cb_queue event_base +struct event_callback; -typedef void (*deferred_cb_fn)(struct deferred_cb *, void *); - -/** A deferred_cb is a callback that can be scheduled to run as part of - * an event_base's event_loop, rather than running immediately. */ -struct deferred_cb { - /** Links to the adjacent active (pending) deferred_cb objects. */ - TAILQ_ENTRY (deferred_cb) cb_next; - /** True iff this deferred_cb is pending in an event_base. */ - unsigned queued : 1; - /** The function to execute when the callback runs. */ - deferred_cb_fn cb; - /** The function's second argument. */ - void *arg; -}; - -/** A deferred_cb_queue is a list of deferred_cb that we can add to and run. */ -struct deferred_cb_queue { - /** Lock used to protect the queue. */ - void *lock; - - /** Which event_base does this queue associate itself with? - * (Used for timing) */ - struct event_base *base; - - /** How many entries are in the queue? */ - int active_count; - - /** Function called when adding to the queue from another thread. */ - void (*notify_fn)(struct deferred_cb_queue *, void *); - void *notify_arg; - - /** Deferred callback management: a list of deferred callbacks to - * run active the active events. */ - TAILQ_HEAD (deferred_cb_list, deferred_cb) deferred_cb_list; -}; +typedef void (*deferred_cb_fn)(struct event_callback *, void *); /** Initialize an empty, non-pending deferred_cb. @@ -80,27 +48,23 @@ struct deferred_cb_queue { @param cb The function to run when the deferred_cb executes. @param arg The function's second argument. */ -void event_deferred_cb_init_(struct deferred_cb *, deferred_cb_fn, void *); +void event_deferred_cb_init_(struct event_base *base, struct event_callback *, deferred_cb_fn, void *); /** Cancel a deferred_cb if it is currently scheduled in an event_base. */ -void event_deferred_cb_cancel_(struct deferred_cb_queue *, struct deferred_cb *); +void event_deferred_cb_cancel_(struct event_base *, struct event_callback *); /** Activate a deferred_cb if it is not currently scheduled in an event_base. - */ -void event_deferred_cb_schedule_(struct deferred_cb_queue *, struct deferred_cb *); -#define LOCK_DEFERRED_QUEUE(q) \ - EVLOCK_LOCK((q)->lock, 0) -#define UNLOCK_DEFERRED_QUEUE(q) \ - EVLOCK_UNLOCK((q)->lock, 0) + Return true iff it was not previously scheduled. + */ +int event_deferred_cb_schedule_(struct event_base *, struct event_callback *); #ifdef __cplusplus } #endif -void event_deferred_cb_queue_init_(struct deferred_cb_queue *); -struct deferred_cb_queue *event_base_get_deferred_cb_queue_(struct event_base *); +#define event_base_get_deferred_cb_queue_(x) (x) #endif /* EVENT_INTERNAL_H_INCLUDED_ */ |