1 /* 2 * Copyright (c) 2009-2012 Niels Provos and Nick Mathewson 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 3. The name of the author may not be used to endorse or promote products 13 * derived from this software without specific prior written permission. 14 * 15 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 16 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 17 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 18 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 19 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 20 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 24 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 */ 26 #ifndef DEFER_INTERNAL_H_INCLUDED_ 27 #define DEFER_INTERNAL_H_INCLUDED_ 28 29 #ifdef __cplusplus 30 extern "C" { 31 #endif 32 33 #include "event2/event-config.h" 34 #include "evconfig-private.h" 35 36 #include <sys/queue.h> 37 38 struct event_callback; 39 typedef void (*deferred_cb_fn)(struct event_callback *, void *); 40 41 /** 42 Initialize an empty, non-pending event_callback. 43 44 @param deferred The struct event_callback structure to initialize. 45 @param priority The priority that the callback should run at. 46 @param cb The function to run when the struct event_callback executes. 47 @param arg The function's second argument. 48 */ 49 void event_deferred_cb_init_(struct event_callback *, ev_uint8_t, deferred_cb_fn, void *); 50 /** 51 Change the priority of a non-pending event_callback. 52 */ 53 void event_deferred_cb_set_priority_(struct event_callback *, ev_uint8_t); 54 /** 55 Cancel a struct event_callback if it is currently scheduled in an event_base. 56 */ 57 void event_deferred_cb_cancel_(struct event_base *, struct event_callback *); 58 /** 59 Activate a struct event_callback if it is not currently scheduled in an event_base. 60 61 Return true iff it was not previously scheduled. 62 */ 63 int event_deferred_cb_schedule_(struct event_base *, struct event_callback *); 64 65 #ifdef __cplusplus 66 } 67 #endif 68 69 #endif /* EVENT_INTERNAL_H_INCLUDED_ */ 70 71