aboutsummaryrefslogtreecommitdiff
path: root/defer-internal.h
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2017-08-07 14:18:18 -0700
committerElliott Hughes <enh@google.com>2017-08-07 16:58:18 -0700
commit2a572d125a91a4aafd3ad8ce87259fc640fa0763 (patch)
treebd05e575a4a2629cc420c5e2bc54f176fee611ab /defer-internal.h
parent596447c7ff2881a67e7082c905112584c3e61a17 (diff)
downloadlibevent-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.h72
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_ */