Core Update of doxygen, removal of history, changing "ser" to "kamailio"
[sip-router] / lock_alloc.h
1 /*
2  *
3  * Copyright (C) 2001-2003 FhG Fokus
4  *
5  * This file is part of Kamailio, a free SIP server.
6  *
7  * Kamailio is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version
11  *
12  * For a license to use the Kamailio software under conditions
13  * other than those described here, or to purchase support for this
14  * software, please contact iptel.org by e-mail at the following addresses:
15  *    info@iptel.org
16  *
17  * Kamailio is distributed in the hope that it will be useful,
18  * but WITHOUT ANY WARRANTY; without even the implied warranty of
19  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20  * GNU General Public License for more details.
21  *
22  * You should have received a copy of the GNU General Public License 
23  * along with this program; if not, write to the Free Software 
24  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
25  */
26
27 /*!
28 * \file
29 * \brief Kamailio core :: Kamailio locking library
30 * \author andrei
31 * \ingroup core
32 * Module: \ref core
33 *
34  *   WARNING: don't include this directly include instead locking.h!
35  *
36 Implements: (see also locking.h)
37
38         simple locks:
39         -------------
40         gen_lock_t* lock_alloc();                - allocates a lock in shared mem.
41         void    lock_dealloc(gen_lock_t* lock);  - deallocates the lock's shared m.
42         
43         lock sets: [implemented only for FL & SYSV so far]
44         ----------
45         gen_lock_set_t* lock_set_alloc(no)               - allocs a lock set in shm.
46         void lock_set_dealloc(gen_lock_set_t* s);        - deallocs the lock set shm.
47
48 */
49
50 #ifndef _lock_alloc_h
51 #define _lock_alloc_h
52
53 /*shm_{malloc, free}*/
54 #include "mem/mem.h"
55 #ifdef SHM_MEM
56 #include "mem/shm_mem.h"
57 #else
58 #error "locking requires shared memory support"
59 #endif
60
61 #if defined(FAST_LOCK) || defined(USE_PTHREAD_MUTEX) || defined(USE_POSIX_SEM)
62 /* simple locks*/
63 #define lock_alloc() shm_malloc(sizeof(gen_lock_t))
64 #define lock_dealloc(lock) shm_free((void*)lock)
65 /* lock sets */
66
67 inline static gen_lock_set_t* lock_set_alloc(int n)
68 {
69         gen_lock_set_t* ls;
70         ls=(gen_lock_set_t*)shm_malloc(sizeof(gen_lock_set_t)+n*sizeof(gen_lock_t));
71         if (ls==0){
72                 LM_CRIT("could not allocate lock_set\n");
73         }else{
74                 ls->locks=(gen_lock_t*)((char*)ls+sizeof(gen_lock_set_t));
75                 ls->size=n;
76         }
77         return ls;
78 }
79
80 #define lock_set_dealloc(lock_set) shm_free((void*)lock_set)
81
82 #elif defined USE_SYSV_SEM
83
84 /*simple locks*/
85 #define lock_alloc() shm_malloc(sizeof(gen_lock_t))
86 #define lock_dealloc(lock) shm_free((void*)lock)
87 /* lock sets */
88
89 inline static gen_lock_set_t* lock_set_alloc(int n)
90 {
91         gen_lock_set_t* ls;
92         ls=(gen_lock_set_t*)shm_malloc(sizeof(gen_lock_set_t));
93         if (ls){
94                 ls->size=n;
95                 ls->semid=-1;
96         };
97         return ls;
98 }
99
100
101 #define lock_set_dealloc(lock_set) shm_free((void*)lock_set)
102
103
104 #else
105 #error "no locking method selected"
106 #endif
107
108
109 #endif