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