diff options
author | Elliott Hughes <enh@google.com> | 2017-08-07 14:18:18 -0700 |
---|---|---|
committer | Elliott Hughes <enh@google.com> | 2017-08-07 16:58:18 -0700 |
commit | 2a572d125a91a4aafd3ad8ce87259fc640fa0763 (patch) | |
tree | bd05e575a4a2629cc420c5e2bc54f176fee611ab /defer-internal.h | |
parent | 596447c7ff2881a67e7082c905112584c3e61a17 (diff) | |
download | libevent-2a572d125a91a4aafd3ad8ce87259fc640fa0763.tar.gz |
Upgrade to 2.1.8-stable (2017-01-22).
Bug: N/A
Test: builds
Change-Id: Idbbdc1db3d01984a4f4b60f8fdf455140b6b7ca6
Diffstat (limited to 'defer-internal.h')
-rw-r--r-- | defer-internal.h | 72 |
1 files changed, 21 insertions, 51 deletions
diff --git a/defer-internal.h b/defer-internal.h index 96a5cac..e3c7d7d 100644 --- a/defer-internal.h +++ b/defer-internal.h @@ -23,78 +23,48 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#ifndef _DEFER_INTERNAL_H_ -#define _DEFER_INTERNAL_H_ +#ifndef DEFER_INTERNAL_H_INCLUDED_ +#define DEFER_INTERNAL_H_INCLUDED_ #ifdef __cplusplus extern "C" { #endif #include "event2/event-config.h" -#include <sys/queue.h> - -struct deferred_cb; - -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; +#include "evconfig-private.h" - /** 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; +#include <sys/queue.h> - /** Deferred callback management: a list of deferred callbacks to - * run active the active events. */ - TAILQ_HEAD (deferred_cb_list, deferred_cb) deferred_cb_list; -}; +struct event_callback; +typedef void (*deferred_cb_fn)(struct event_callback *, void *); /** - Initialize an empty, non-pending deferred_cb. + Initialize an empty, non-pending event_callback. - @param deferred The deferred_cb structure to initialize. - @param cb The function to run when the deferred_cb executes. + @param deferred The struct event_callback structure to initialize. + @param priority The priority that the callback should run at. + @param cb The function to run when the struct event_callback 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_callback *, ev_uint8_t, deferred_cb_fn, void *); /** - Cancel a deferred_cb if it is currently scheduled in an event_base. + Change the priority of a non-pending event_callback. */ -void event_deferred_cb_cancel(struct deferred_cb_queue *, struct deferred_cb *); +void event_deferred_cb_set_priority_(struct event_callback *, ev_uint8_t); /** - Activate a deferred_cb if it is not currently scheduled in an event_base. + Cancel a struct event_callback if it is currently scheduled in an event_base. */ -void event_deferred_cb_schedule(struct deferred_cb_queue *, struct deferred_cb *); +void event_deferred_cb_cancel_(struct event_base *, struct event_callback *); +/** + Activate a struct event_callback if it is not currently scheduled in an event_base. -#define LOCK_DEFERRED_QUEUE(q) \ - EVLOCK_LOCK((q)->lock, 0) -#define UNLOCK_DEFERRED_QUEUE(q) \ - EVLOCK_UNLOCK((q)->lock, 0) + Return true if 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 *); - -#endif /* _EVENT_INTERNAL_H_ */ +#endif /* EVENT_INTERNAL_H_INCLUDED_ */ |