00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include <config.h>
00026
00027 #include <isc/event.h>
00028 #include <isc/mem.h>
00029 #include <isc/util.h>
00030
00031
00032
00033
00034
00035 static void
00036 destroy(isc_event_t *event) {
00037 isc_mem_t *mctx = event->ev_destroy_arg;
00038
00039 isc_mem_put(mctx, event, event->ev_size);
00040 }
00041
00042 isc_event_t *
00043 isc_event_allocate(isc_mem_t *mctx, void *sender, isc_eventtype_t type,
00044 isc_taskaction_t action, void *arg, size_t size)
00045 {
00046 isc_event_t *event;
00047
00048 REQUIRE(size >= sizeof(struct isc_event));
00049 REQUIRE(action != NULL);
00050
00051 event = isc_mem_get(mctx, size);
00052 if (event == NULL)
00053 return (NULL);
00054
00055 ISC_EVENT_INIT(event, size, 0, NULL, type, action, arg,
00056 sender, destroy, mctx);
00057
00058 return (event);
00059 }
00060
00061 isc_event_t *
00062 isc_event_constallocate(isc_mem_t *mctx, void *sender, isc_eventtype_t type,
00063 isc_taskaction_t action, const void *arg, size_t size)
00064 {
00065 isc_event_t *event;
00066 void *deconst_arg;
00067
00068 REQUIRE(size >= sizeof(struct isc_event));
00069 REQUIRE(action != NULL);
00070
00071 event = isc_mem_get(mctx, size);
00072 if (event == NULL)
00073 return (NULL);
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087 DE_CONST(arg, deconst_arg);
00088
00089 ISC_EVENT_INIT(event, size, 0, NULL, type, action, deconst_arg,
00090 sender, destroy, mctx);
00091
00092 return (event);
00093 }
00094
00095 void
00096 isc_event_free(isc_event_t **eventp) {
00097 isc_event_t *event;
00098
00099 REQUIRE(eventp != NULL);
00100 event = *eventp;
00101 REQUIRE(event != NULL);
00102
00103 if (event->ev_destroy != NULL)
00104 (event->ev_destroy)(event);
00105
00106 *eventp = NULL;
00107 }