pdbt: script for finish carrier IDs, from Mikko Lehto, mikko dot lehto at setera...
[sip-router] / shm_init.c
1 /* 
2  * $Id$
3  * 
4  * Copyright (C) 2010 iptelorg GmbH
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  * shm_init.c
20  */
21 /*
22  * History:
23  * --------
24  *  2010-01-10  initial version (andrei)
25 */
26
27 #include "shm_init.h"
28 #include "mem/mem.h"
29 #include "globals.h"
30
31 static int shm_init = 0;
32
33
34 /** check if shm is initialized.
35  * @return 1 if initialized, 0 if not
36  */
37 int shm_initialized()
38 {
39         return shm_init;
40 }
41
42
43
44 #ifdef SHM_MEM
45 /** init shm mem.
46  * @return 0 on success, < 0 on error
47  * it _must_ be called:
48  *  - after the shm_mem_size is known
49  *  - after shm_force_alloc is known (mlock_pages should happen at a later
50  *     point so it's not yet needed here)
51  *  - after the user is known (so that in the SYSV sems case the sems will
52  *     have the correct euid)
53  *  - before init_timer and init_tcp
54  * --andrei
55  *
56  * Global vars used: shm_mem_size, shm_force_alloc, user & uid.
57  * Side effects: it might set uid, gid and shm_mem_size.
58  */
59 int init_shm()
60 {
61         /* set uid if user is set */
62         if (user && uid == 0){
63                 if (user2uid(&uid, &gid, user)<0){
64                         fprintf(stderr, "bad user name/uid number: -u %s\n", user);
65                         goto error;
66                 }
67         }
68         if (shm_mem_size == 0)
69                 shm_mem_size=SHM_MEM_SIZE * 1024 * 1024;
70         if (init_shm_mallocs(shm_force_alloc)==-1)
71                 goto error;
72         shm_init=1;
73         return 0;
74 error:
75         return -1;
76 }
77 #endif /* SHM_MEM */
78
79 /* vi: set ts=4 sw=4 tw=79:ai:cindent: */