- sock_lists completely re-organized
[sip-router] / mem / mem.h
1 /* $Id$
2  *
3  * memory related stuff (malloc & friends)
4  * 
5  *
6  * Copyright (C) 2001-2003 Fhg Fokus
7  *
8  * This file is part of ser, a free SIP server.
9  *
10  * ser is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 2 of the License, or
13  * (at your option) any later version
14  *
15  * For a license to use the ser software under conditions
16  * other than those described here, or to purchase support for this
17  * software, please contact iptel.org by e-mail at the following addresses:
18  *    info@iptel.org
19  *
20  * ser is distributed in the hope that it will be useful,
21  * but WITHOUT ANY WARRANTY; without even the implied warranty of
22  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23  * GNU General Public License for more details.
24  *
25  * You should have received a copy of the GNU General Public License 
26  * along with this program; if not, write to the Free Software 
27  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
28  */
29 /*
30  * History:
31  * --------
32  *  2003-03-10  __FUNCTION__ is a gcc-ism, defined it to "" for sun cc
33  *               (andrei)
34  *  2003-03-07  split init_malloc into init_pkg_mallocs & init_shm_mallocs 
35  *               (andrei)
36  */
37
38
39
40 #ifndef mem_h
41 #define mem_h
42 #include "../config.h"
43 #include "../dprint.h"
44
45 /* fix debug defines, DBG_F_MALLOC <=> DBG_QM_MALLOC */
46 #ifdef F_MALLOC
47         #ifdef DBG_F_MALLOC
48                 #ifndef DBG_QM_MALLOC
49                         #define DBG_QM_MALLOC
50                 #endif
51         #elif defined(DBG_QM_MALLOC)
52                 #define DBG_F_MALLOC
53         #endif
54 #endif
55
56 #ifdef PKG_MALLOC
57 #       ifdef VQ_MALLOC
58 #               include "vq_malloc.h"
59                 extern struct vqm_block* mem_block;
60 #       elif defined F_MALLOC
61 #               include "f_malloc.h"
62                 extern struct fm_block* mem_block;
63 #   else
64 #               include "q_malloc.h"
65                 extern struct qm_block* mem_block;
66 #       endif
67
68         extern char mem_pool[PKG_MEM_POOL_SIZE];
69
70
71 #       ifdef DBG_QM_MALLOC
72 #ifdef __SUNPRO_C
73                 #define __FUNCTION__ ""  /* gcc specific */
74 #endif
75 #               ifdef VQ_MALLOC
76 #                       define pkg_malloc(s) vqm_malloc(mem_block, (s),__FILE__, \
77                                 __FUNCTION__, __LINE__)
78 #                       define pkg_free(p)   vqm_free(mem_block, (p), __FILE__,  \
79                                 __FUNCTION__, __LINE__)
80 #                       warn "no proper realloc implementation, use another mem. alloc"
81 #               elif defined F_MALLOC
82 #                       define pkg_malloc(s) fm_malloc(mem_block, (s),__FILE__, \
83                                 __FUNCTION__, __LINE__)
84 #                       define pkg_free(p)   fm_free(mem_block, (p), __FILE__,  \
85                                 __FUNCTION__, __LINE__)
86 #                       define pkg_realloc(p, s) fm_realloc(mem_block, (p), (s),__FILE__, \
87                                 __FUNCTION__, __LINE__)
88 #               else
89 #                       define pkg_malloc(s) qm_malloc(mem_block, (s),__FILE__, \
90                                 __FUNCTION__, __LINE__)
91 #                       define pkg_realloc(p, s) qm_realloc(mem_block, (p), (s),__FILE__, \
92                                 __FUNCTION__, __LINE__)
93 #                       define pkg_free(p)   qm_free(mem_block, (p), __FILE__,  \
94                                 __FUNCTION__, __LINE__)
95 #               endif
96 #       else
97 #               ifdef VQ_MALLOC
98 #                       define pkg_malloc(s) vqm_malloc(mem_block, (s))
99 #                       define pkg_free(p)   vqm_free(mem_block, (p))
100 #               elif defined F_MALLOC
101 #                       define pkg_malloc(s) fm_malloc(mem_block, (s))
102 #                       define pkg_realloc(p, s) fm_realloc(mem_block, (p), (s))
103 #                       define pkg_free(p)   fm_free(mem_block, (p))
104 #               else
105 #                       define pkg_malloc(s) qm_malloc(mem_block, (s))
106 #                       define pkg_realloc(p, s) qm_realloc(mem_block, (p), (s))
107 #                       define pkg_free(p)   qm_free(mem_block, (p))
108 #               endif
109 #       endif
110 #       ifdef VQ_MALLOC
111 #               define pkg_status()  vqm_status(mem_block)
112 #       elif defined F_MALLOC
113 #               define pkg_status()  fm_status(mem_block)
114 #       else
115 #               define pkg_status()  qm_status(mem_block)
116 #       endif
117 #elif defined(SHM_MEM) && defined(USE_SHM_MEM)
118 #       include "shm_mem.h"
119 #       define pkg_malloc(s) shm_malloc((s))
120 #       define pkg_free(p)   shm_free((p))
121 #       define pkg_status()  shm_status()
122 #else
123 #       include <stdlib.h>
124 #       define pkg_malloc(s) \
125         (  { void *v; v=malloc((s)); \
126            DBG("malloc %p size %d end %p\n", v, s, (char*)v+(s));\
127            v; } )
128 #       define pkg_free(p)  do{ DBG("free %p\n", (p)); free((p)); }while(0);
129 #       define pkg_status()
130 #endif
131
132 int init_pkg_mallocs();
133 int init_shm_mallocs();
134
135 #endif