1180a2ad1f17e7476f539eb1b4106dc1f130ac0e
[sip-router] / mem / mem.c
1 /*
2  * $Id$
3  *
4  * Copyright (C) 2001-2003 FhG Fokus
5  *
6  * This file is part of sip-router, a free SIP server.
7  *
8  * Permission to use, copy, modify, and distribute this software for any
9  * purpose with or without fee is hereby granted, provided that the above
10  * copyright notice and this permission notice appear in all copies.
11  *
12  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
13  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
14  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
15  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
16  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19  *
20  *
21  * History:
22  * --------
23  *  2003-04-08  init_mallocs split into init_{pkg,shm}_malloc (andrei)
24  * 
25  */
26
27
28 #include <stdio.h>
29 #include <stdlib.h>
30 #include "../config.h"
31 #include "../dprint.h"
32 #include "../globals.h"
33 #include "mem.h"
34
35 #ifdef PKG_MALLOC
36 #include "q_malloc.h"
37 #endif
38
39 #ifdef SHM_MEM
40 #include "shm_mem.h"
41 #endif
42
43 #ifdef PKG_MALLOC
44         #ifndef DL_MALLOC
45         char* mem_pool = 0;
46         #endif
47
48         #ifdef F_MALLOC
49                 struct fm_block* mem_block = 0;
50         #elif defined DL_MALLOC
51                 /* don't need this */
52         #else
53                 struct qm_block* mem_block = 0;
54         #endif
55 #endif
56
57
58 int init_pkg_mallocs()
59 {
60 #ifdef PKG_MALLOC
61         /*init mem*/
62         #ifndef DL_MALLOC
63                 if (pkg_mem_size == 0)
64                         pkg_mem_size = PKG_MEM_POOL_SIZE;
65                 mem_pool = malloc(pkg_mem_size);
66         #endif
67         #ifdef F_MALLOC
68                 if (mem_pool)
69                         mem_block=fm_malloc_init(mem_pool, pkg_mem_size);
70         #elif DL_MALLOC
71                 /* don't need this */
72         #else
73                 if (mem_pool)
74                         mem_block=qm_malloc_init(mem_pool, pkg_mem_size);
75         #endif
76         #ifndef DL_MALLOC
77         if (mem_block==0){
78                 LOG(L_CRIT, "could not initialize memory pool\n");
79                 fprintf(stderr, "Too much pkg memory demanded: %ld bytes\n",
80                                                 pkg_mem_size);
81                 return -1;
82         }
83         #endif
84 #endif
85         return 0;
86 }
87
88
89
90 void destroy_pkg_mallocs()
91 {
92 #ifdef PKG_MALLOC
93         #ifndef DL_MALLOC
94                 if (mem_pool) {
95                         free(mem_pool);
96                         mem_pool = 0;
97                 }
98         #endif
99 #endif /* PKG_MALLOC */
100 }
101
102
103
104 int init_shm_mallocs(int force_alloc)
105 {
106 #ifdef SHM_MEM
107         if (shm_mem_init(force_alloc)<0) {
108                 LOG(L_CRIT, "could not initialize shared memory pool, exiting...\n");
109                  fprintf(stderr, "Too much shared memory demanded: %ld\n",
110                         shm_mem_size );
111                 return -1;
112         }
113 #endif
114         return 0;
115 }
116
117