00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef ISC_EVENT_H
00021 #define ISC_EVENT_H 1
00022
00023
00024
00025 #include <isc/lang.h>
00026 #include <isc/types.h>
00027
00028
00029
00030
00031
00032 typedef void (*isc_eventdestructor_t)(isc_event_t *);
00033
00034 #define ISC_EVENT_COMMON(ltype) \
00035 size_t ev_size; \
00036 unsigned int ev_attributes; \
00037 void * ev_tag; \
00038 isc_eventtype_t ev_type; \
00039 isc_taskaction_t ev_action; \
00040 void * ev_arg; \
00041 void * ev_sender; \
00042 isc_eventdestructor_t ev_destroy; \
00043 void * ev_destroy_arg; \
00044 ISC_LINK(ltype) ev_link
00045
00046
00047
00048
00049
00050
00051 #define ISC_EVENTATTR_NOPURGE 0x00000001
00052
00053
00054
00055
00056
00057
00058
00059
00060 #define ISC_EVENTATTR_CANCELED 0x00000002
00061
00062 #define ISC_EVENT_INIT(event, sz, at, ta, ty, ac, ar, sn, df, da) \
00063 do { \
00064 (event)->ev_size = (sz); \
00065 (event)->ev_attributes = (at); \
00066 (event)->ev_tag = (ta); \
00067 (event)->ev_type = (ty); \
00068 (event)->ev_action = (ac); \
00069 (event)->ev_arg = (ar); \
00070 (event)->ev_sender = (sn); \
00071 (event)->ev_destroy = (df); \
00072 (event)->ev_destroy_arg = (da); \
00073 ISC_LINK_INIT((event), ev_link); \
00074 } while (0)
00075
00076
00077
00078
00079
00080 struct isc_event {
00081 ISC_EVENT_COMMON(struct isc_event);
00082 };
00083
00084 #define ISC_EVENTTYPE_FIRSTEVENT 0x00000000
00085 #define ISC_EVENTTYPE_LASTEVENT 0xffffffff
00086
00087 #define ISC_EVENT_PTR(p) ((isc_event_t **)(void *)(p))
00088
00089 ISC_LANG_BEGINDECLS
00090
00091 isc_event_t *
00092 isc_event_allocate(isc_mem_t *mctx, void *sender, isc_eventtype_t type,
00093 isc_taskaction_t action, void *arg, size_t size);
00094 isc_event_t *
00095 isc_event_constallocate(isc_mem_t *mctx, void *sender, isc_eventtype_t type,
00096 isc_taskaction_t action, const void *arg, size_t size);
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119 void
00120 isc_event_free(isc_event_t **);
00121
00122 ISC_LANG_ENDDECLS
00123
00124 #endif