1 /* 2 * Copyright (C) 2015 Daniel-Constantin Mierla (asipto.com) 3 * 4 * This file is part of Kamailio, a free SIP server. 5 * 6 * Permission to use, copy, modify, and distribute this software for any 7 * purpose with or without fee is hereby granted, provided that the above 8 * copyright notice and this permission notice appear in all copies. 9 * 10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17 */ 18 19 20 #ifndef _sr_mem_api_ 21 #define _sr_mem_api_ 22 23 #include <string.h> 24 25 #include "src_loc.h" 26 #include "meminfo.h" 27 #include "memdbg.h" 28 29 #ifdef DBG_SR_MEMORY 30 31 typedef void* (*sr_malloc_f)(void* mbp, size_t size, 32 const char* file, const char* func, unsigned int line, const char* mname); 33 typedef void (*sr_free_f)(void* mbp, void* p, const char* file, const char* func, 34 unsigned int line, const char* mname); 35 typedef void* (*sr_realloc_f)(void* mbp, void* p, size_t size, 36 const char* file, const char* func, unsigned int line, const char* mname); 37 typedef void* (*sr_resize_f)(void* mbp, void* p, size_t size, 38 const char* file, const char* func, unsigned int line, const char* mname); 39 40 #else /*DBG_SR_MEMORY*/ 41 42 typedef void* (*sr_malloc_f)(void* mbp, size_t size); 43 typedef void (*sr_free_f)(void* mbp, void* p); 44 typedef void* (*sr_realloc_f)(void* mbp, void* p, size_t size); 45 typedef void* (*sr_resize_f)(void* mbp, void* p, size_t size); 46 47 #endif /*DBG_SR_MEMORY*/ 48 49 typedef void (*sr_shm_glock_f)(void* mbp); 50 typedef void (*sr_shm_gunlock_f)(void* mbp); 51 52 typedef void (*sr_mem_status_f)(void* mbp); 53 typedef void (*sr_mem_info_f)(void* mbp, struct mem_info* info); 54 typedef unsigned long (*sr_mem_available_f)(void* mbp); 55 typedef void (*sr_mem_sums_f)(void* mbp); 56 57 typedef void (*sr_mem_destroy_f)(void); 58 59 typedef void (*sr_mem_mod_get_stats_f)(void* mbp, void **p); 60 typedef void (*sr_mem_mod_free_stats_f)(void* mbp); 61 62 /*private memory api*/ 63 typedef struct sr_pkg_api { 64 /*memory manager name - soft copy*/ 65 char *mname; 66 /*entire private memory zone - soft copy*/ 67 char *mem_pool; 68 /*memory manager block - soft copy*/ 69 void *mem_block; 70 /*memory chunk allocation*/ 71 sr_malloc_f xmalloc; 72 /*memory chunk allocation with 0 filling */ 73 sr_malloc_f xmallocxz; 74 /*memory chunk reallocation*/ 75 sr_realloc_f xrealloc; 76 /*memory chunk reallocation with always free of old buffer*/ 77 sr_realloc_f xreallocxf; 78 /*memory chunk free*/ 79 sr_free_f xfree; 80 /*memory status*/ 81 sr_mem_status_f xstatus; 82 /*memory info - internal metrics*/ 83 sr_mem_info_f xinfo; 84 /*memory available size*/ 85 sr_mem_available_f xavailable; 86 /*memory summary*/ 87 sr_mem_sums_f xsums; 88 /*memory destroy manager*/ 89 sr_mem_destroy_f xdestroy; 90 /*memory stats per module*/ 91 sr_mem_mod_get_stats_f xmodstats; 92 /*memory stats free per module*/ 93 sr_mem_mod_free_stats_f xfmodstats; 94 } sr_pkg_api_t; 95 96 /*shared memory api*/ 97 typedef struct sr_shm_api { 98 /*memory manager name - soft copy*/ 99 char *mname; 100 /*entire private memory zone - soft copy*/ 101 void *mem_pool; 102 /*memory manager block - soft copy*/ 103 void *mem_block; 104 /*memory chunk allocation*/ 105 sr_malloc_f xmalloc; 106 /*memory chunk allocation with 0 filling */ 107 sr_malloc_f xmallocxz; 108 /*memory chunk allocation without locking shm*/ 109 sr_malloc_f xmalloc_unsafe; 110 /*memory chunk reallocation*/ 111 sr_realloc_f xrealloc; 112 /*memory chunk reallocation with always free of old buffer*/ 113 sr_realloc_f xreallocxf; 114 /*memory chunk resizing - free+malloc in same locking*/ 115 sr_resize_f xresize; 116 /*memory chunk free*/ 117 sr_free_f xfree; 118 /*memory chunk free without locking shm*/ 119 sr_free_f xfree_unsafe; 120 /*memory status*/ 121 sr_mem_status_f xstatus; 122 /*memory info - internal metrics*/ 123 sr_mem_info_f xinfo; 124 /*memory available size*/ 125 sr_mem_available_f xavailable; 126 /*memory summary*/ 127 sr_mem_sums_f xsums; 128 /*memory destroy manager*/ 129 sr_mem_destroy_f xdestroy; 130 /*memory stats per module*/ 131 sr_mem_mod_get_stats_f xmodstats; 132 /*memory stats free per module*/ 133 sr_mem_mod_free_stats_f xfmodstats; 134 /*memory managing global lock*/ 135 sr_shm_glock_f xglock; 136 /*memory managing global unlock*/ 137 sr_shm_gunlock_f xgunlock; 138 } sr_shm_api_t; 139 140 #endif 141