summaryrefslogtreecommitdiff
path: root/defer-internal.h
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2012-04-06 04:33:19 -0400
committerNick Mathewson <nickm@torproject.org>2012-05-09 12:05:53 -0400
commitae2b84b2575be93d0aebba5c0b78453836f89f3c (patch)
treed72145bcb64a0556560e07181828821ebc180a3e /defer-internal.h
parentfec8bae2673966325eeaabc3fc1af60b584abb1a (diff)
downloadlibevent-ae2b84b2575be93d0aebba5c0b78453836f89f3c.tar.gz
Replace deferred_cbs with event_callback-based implementation.
Diffstat (limited to 'defer-internal.h')
-rw-r--r--defer-internal.h56
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_ */