1 /* 2 * Copyright (C) Internet Systems Consortium, Inc. ("ISC") 3 * 4 * Permission to use, copy, modify, and/or distribute this software for any 5 * purpose with or without fee is hereby granted, provided that the above 6 * copyright notice and this permission notice appear in all copies. 7 * 8 * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH 9 * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 10 * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, 11 * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 12 * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE 13 * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 14 * PERFORMANCE OF THIS SOFTWARE. 15 */ 16 17 /* $Id: event.c,v 1.3 2020/02/25 05:00:43 jsg Exp $ */ 18 19 /*! 20 * \file 21 * \author Principal Author: Bob Halley 22 */ 23 24 #include <stdlib.h> 25 #include <isc/event.h> 26 27 #include <isc/util.h> 28 29 /*** 30 *** Events. 31 ***/ 32 33 static void 34 destroy(isc_event_t *event) { 35 free(event); 36 } 37 38 isc_event_t * 39 isc_event_allocate(void *sender, isc_eventtype_t type, 40 isc_taskaction_t action, void *arg, size_t size) 41 { 42 isc_event_t *event; 43 44 REQUIRE(size >= sizeof(struct isc_event)); 45 REQUIRE(action != NULL); 46 47 event = malloc(size); 48 if (event == NULL) 49 return (NULL); 50 51 ISC_EVENT_INIT(event, size, 0, NULL, type, action, arg, 52 sender, destroy); 53 54 return (event); 55 } 56 57 void 58 isc_event_free(isc_event_t **eventp) { 59 isc_event_t *event; 60 61 REQUIRE(eventp != NULL); 62 event = *eventp; 63 REQUIRE(event != NULL); 64 65 REQUIRE(!ISC_LINK_LINKED(event, ev_link)); 66 REQUIRE(!ISC_LINK_LINKED(event, ev_ratelink)); 67 68 if (event->ev_destroy != NULL) 69 (event->ev_destroy)(event); 70 71 *eventp = NULL; 72 } 73