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