File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / ntp / lib / isc / event.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue May 29 12:08:38 2012 UTC (12 years, 1 month ago) by misho
Branches: ntp, MAIN
CVS tags: v4_2_6p5p0, v4_2_6p5, HEAD
ntp 4.2.6p5

    1: /*
    2:  * Copyright (C) 2004, 2005, 2007  Internet Systems Consortium, Inc. ("ISC")
    3:  * Copyright (C) 1998-2001  Internet Software Consortium.
    4:  *
    5:  * Permission to use, copy, modify, and/or distribute this software for any
    6:  * purpose with or without fee is hereby granted, provided that the above
    7:  * copyright notice and this permission notice appear in all copies.
    8:  *
    9:  * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
   10:  * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
   11:  * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
   12:  * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
   13:  * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
   14:  * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
   15:  * PERFORMANCE OF THIS SOFTWARE.
   16:  */
   17: 
   18: /* $Id: event.c,v 1.1.1.1 2012/05/29 12:08:38 misho Exp $ */
   19: 
   20: /*!
   21:  * \file
   22:  * \author Principal Author: Bob Halley
   23:  */
   24: 
   25: #include <config.h>
   26: 
   27: #include <isc/event.h>
   28: #include <isc/mem.h>
   29: #include <isc/util.h>
   30: 
   31: /***
   32:  *** Events.
   33:  ***/
   34: 
   35: static void
   36: destroy(isc_event_t *event) {
   37: 	isc_mem_t *mctx = event->ev_destroy_arg;
   38: 
   39: 	isc_mem_put(mctx, event, event->ev_size);
   40: }
   41: 
   42: isc_event_t *
   43: isc_event_allocate(isc_mem_t *mctx, void *sender, isc_eventtype_t type,
   44: 		   isc_taskaction_t action, const void *arg, size_t size)
   45: {
   46: 	isc_event_t *event;
   47: 	void *deconst_arg;
   48: 
   49: 	REQUIRE(size >= sizeof(struct isc_event));
   50: 	REQUIRE(action != NULL);
   51: 
   52: 	event = isc_mem_get(mctx, size);
   53: 	if (event == NULL)
   54: 		return (NULL);
   55: 
   56: 	/*
   57: 	 * Removing the const attribute from "arg" is the best of two
   58: 	 * evils here.  If the event->ev_arg member is made const, then
   59: 	 * it affects a great many users of the task/event subsystem
   60: 	 * which are not passing in an "arg" which starts its life as
   61: 	 * const.  Changing isc_event_allocate() and isc_task_onshutdown()
   62: 	 * to not have "arg" prototyped as const (which is quite legitimate,
   63: 	 * because neither of those functions modify arg) can cause
   64: 	 * compiler whining anytime someone does want to use a const
   65: 	 * arg that they themselves never modify, such as with
   66: 	 * gcc -Wwrite-strings and using a string "arg".
   67: 	 */
   68: 	DE_CONST(arg, deconst_arg);
   69: 
   70: 	ISC_EVENT_INIT(event, size, 0, NULL, type, action, deconst_arg,
   71: 		       sender, destroy, mctx);
   72: 
   73: 	return (event);
   74: }
   75: 
   76: void
   77: isc_event_free(isc_event_t **eventp) {
   78: 	isc_event_t *event;
   79: 
   80: 	REQUIRE(eventp != NULL);
   81: 	event = *eventp;
   82: 	REQUIRE(event != NULL);
   83: 
   84: 	if (event->ev_destroy != NULL)
   85: 		(event->ev_destroy)(event);
   86: 
   87: 	*eventp = NULL;
   88: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>