xref: /minix3/external/bsd/dhcp/dist/includes/omapip/alloc.h (revision 83ee113ee0d94f3844d44065af2311604e9a30ad)
1*83ee113eSDavid van Moolenbroek /*	$NetBSD: alloc.h,v 1.1.1.3 2014/07/12 11:57:57 spz Exp $	*/
2*83ee113eSDavid van Moolenbroek /* alloc.h
3*83ee113eSDavid van Moolenbroek 
4*83ee113eSDavid van Moolenbroek    Definitions for the object management API protocol memory allocation... */
5*83ee113eSDavid van Moolenbroek 
6*83ee113eSDavid van Moolenbroek /*
7*83ee113eSDavid van Moolenbroek  * Copyright (c) 2004,2009,2014 by Internet Systems Consortium, Inc. ("ISC")
8*83ee113eSDavid van Moolenbroek  * Copyright (c) 1996-2003 by Internet Software Consortium
9*83ee113eSDavid van Moolenbroek  *
10*83ee113eSDavid van Moolenbroek  * Permission to use, copy, modify, and distribute this software for any
11*83ee113eSDavid van Moolenbroek  * purpose with or without fee is hereby granted, provided that the above
12*83ee113eSDavid van Moolenbroek  * copyright notice and this permission notice appear in all copies.
13*83ee113eSDavid van Moolenbroek  *
14*83ee113eSDavid van Moolenbroek  * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
15*83ee113eSDavid van Moolenbroek  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
16*83ee113eSDavid van Moolenbroek  * MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
17*83ee113eSDavid van Moolenbroek  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
18*83ee113eSDavid van Moolenbroek  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
19*83ee113eSDavid van Moolenbroek  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
20*83ee113eSDavid van Moolenbroek  * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
21*83ee113eSDavid van Moolenbroek  *
22*83ee113eSDavid van Moolenbroek  *   Internet Systems Consortium, Inc.
23*83ee113eSDavid van Moolenbroek  *   950 Charter Street
24*83ee113eSDavid van Moolenbroek  *   Redwood City, CA 94063
25*83ee113eSDavid van Moolenbroek  *   <info@isc.org>
26*83ee113eSDavid van Moolenbroek  *   https://www.isc.org/
27*83ee113eSDavid van Moolenbroek  *
28*83ee113eSDavid van Moolenbroek  */
29*83ee113eSDavid van Moolenbroek 
30*83ee113eSDavid van Moolenbroek isc_result_t omapi_buffer_new (omapi_buffer_t **, const char *, int);
31*83ee113eSDavid van Moolenbroek isc_result_t omapi_buffer_reference (omapi_buffer_t **,
32*83ee113eSDavid van Moolenbroek 				     omapi_buffer_t *, const char *, int);
33*83ee113eSDavid van Moolenbroek isc_result_t omapi_buffer_dereference (omapi_buffer_t **, const char *, int);
34*83ee113eSDavid van Moolenbroek 
35*83ee113eSDavid van Moolenbroek #if defined (DEBUG_MEMORY_LEAKAGE) || defined (DEBUG_MALLOC_POOL) || \
36*83ee113eSDavid van Moolenbroek 		defined (DEBUG_MEMORY_LEAKAGE_ON_EXIT)
37*83ee113eSDavid van Moolenbroek #define DMDOFFSET (sizeof (struct dmalloc_preamble))
38*83ee113eSDavid van Moolenbroek #define DMLFSIZE 16
39*83ee113eSDavid van Moolenbroek #define DMUFSIZE 16
40*83ee113eSDavid van Moolenbroek #define DMDSIZE (DMDOFFSET + DMLFSIZE + DMUFSIZE)
41*83ee113eSDavid van Moolenbroek 
42*83ee113eSDavid van Moolenbroek struct dmalloc_preamble {
43*83ee113eSDavid van Moolenbroek 	struct dmalloc_preamble *prev, *next;
44*83ee113eSDavid van Moolenbroek 	const char *file;
45*83ee113eSDavid van Moolenbroek 	int line;
46*83ee113eSDavid van Moolenbroek 	size_t size;
47*83ee113eSDavid van Moolenbroek 	unsigned long generation;
48*83ee113eSDavid van Moolenbroek 	unsigned char low_fence [DMLFSIZE];
49*83ee113eSDavid van Moolenbroek };
50*83ee113eSDavid van Moolenbroek #else
51*83ee113eSDavid van Moolenbroek #define DMDOFFSET 0
52*83ee113eSDavid van Moolenbroek #define DMDSIZE 0
53*83ee113eSDavid van Moolenbroek #endif
54*83ee113eSDavid van Moolenbroek 
55*83ee113eSDavid van Moolenbroek /* rc_history flags... */
56*83ee113eSDavid van Moolenbroek #define RC_LEASE	1
57*83ee113eSDavid van Moolenbroek #define RC_MISC		2
58*83ee113eSDavid van Moolenbroek 
59*83ee113eSDavid van Moolenbroek #if defined (DEBUG_RC_HISTORY)
60*83ee113eSDavid van Moolenbroek #if !defined (RC_HISTORY_MAX)
61*83ee113eSDavid van Moolenbroek # define RC_HISTORY_MAX 256
62*83ee113eSDavid van Moolenbroek #endif
63*83ee113eSDavid van Moolenbroek 
64*83ee113eSDavid van Moolenbroek #if !defined (RC_HISTORY_FLAGS)
65*83ee113eSDavid van Moolenbroek # define RC_HISTORY_FLAGS (RC_LEASE | RC_MISC)
66*83ee113eSDavid van Moolenbroek #endif
67*83ee113eSDavid van Moolenbroek 
68*83ee113eSDavid van Moolenbroek struct rc_history_entry {
69*83ee113eSDavid van Moolenbroek 	const char *file;
70*83ee113eSDavid van Moolenbroek 	int line;
71*83ee113eSDavid van Moolenbroek 	void *reference;
72*83ee113eSDavid van Moolenbroek 	void *addr;
73*83ee113eSDavid van Moolenbroek 	int refcnt;
74*83ee113eSDavid van Moolenbroek };
75*83ee113eSDavid van Moolenbroek 
76*83ee113eSDavid van Moolenbroek #define rc_register(x, l, r, y, z, d, f) do { \
77*83ee113eSDavid van Moolenbroek 		if (RC_HISTORY_FLAGS & ~(f)) { \
78*83ee113eSDavid van Moolenbroek 			rc_history [rc_history_index].file = (x); \
79*83ee113eSDavid van Moolenbroek 			rc_history [rc_history_index].line = (l); \
80*83ee113eSDavid van Moolenbroek 			rc_history [rc_history_index].reference = (r); \
81*83ee113eSDavid van Moolenbroek 			rc_history [rc_history_index].addr = (y); \
82*83ee113eSDavid van Moolenbroek 			rc_history [rc_history_index].refcnt = (z); \
83*83ee113eSDavid van Moolenbroek 			rc_history_next (d); \
84*83ee113eSDavid van Moolenbroek 		} \
85*83ee113eSDavid van Moolenbroek 	} while (0)
86*83ee113eSDavid van Moolenbroek #define rc_register_mdl(r, y, z, d, f) \
87*83ee113eSDavid van Moolenbroek 	rc_register (__FILE__, __LINE__, r, y, z, d, f)
88*83ee113eSDavid van Moolenbroek #else
89*83ee113eSDavid van Moolenbroek #define rc_register(file, line, reference, addr, refcnt, d, f)
90*83ee113eSDavid van Moolenbroek #define rc_register_mdl(reference, addr, refcnt, d, f)
91*83ee113eSDavid van Moolenbroek #endif
92*83ee113eSDavid van Moolenbroek 
93*83ee113eSDavid van Moolenbroek #if defined (DEBUG_MEMORY_LEAKAGE) || defined (DEBUG_MALLOC_POOL) || \
94*83ee113eSDavid van Moolenbroek 		defined (DEBUG_MEMORY_LEAKAGE_ON_EXIT)
95*83ee113eSDavid van Moolenbroek extern struct dmalloc_preamble *dmalloc_list;
96*83ee113eSDavid van Moolenbroek extern unsigned long dmalloc_outstanding;
97*83ee113eSDavid van Moolenbroek extern unsigned long dmalloc_longterm;
98*83ee113eSDavid van Moolenbroek extern unsigned long dmalloc_generation;
99*83ee113eSDavid van Moolenbroek extern unsigned long dmalloc_cutoff_generation;
100*83ee113eSDavid van Moolenbroek #endif
101*83ee113eSDavid van Moolenbroek 
102*83ee113eSDavid van Moolenbroek #if defined (DEBUG_RC_HISTORY)
103*83ee113eSDavid van Moolenbroek extern struct rc_history_entry rc_history [RC_HISTORY_MAX];
104*83ee113eSDavid van Moolenbroek extern int rc_history_index;
105*83ee113eSDavid van Moolenbroek extern int rc_history_count;
106*83ee113eSDavid van Moolenbroek #endif
107