ea54c36235c5ab925c4c88943fbb24dea89dcd88
[sip-router] / modules / tm / lock.h
1 /*
2  * $Id$
3  */
4
5
6 #ifndef _SEMAPHORE_H
7 #define _SEMAPHORE_H
8
9 #include <sys/types.h>
10 #include <sys/ipc.h>
11 #include <sys/sem.h>
12 #include "../../dprint.h"
13
14
15
16 #ifdef  FAST_LOCK
17 #include "../../fastlock.h"
18 #endif
19
20 #ifdef FAST_LOCK
21 #define ser_lock_t fl_lock_t
22 #else
23 /* typedef to structure we use for mutexing;
24    currently, index to a semaphore set identifier now */
25 typedef struct {
26         int semaphore_set;
27         int semaphore_index;
28 } ser_lock_t;
29 #endif
30
31
32 enum timer_groups {
33         TG_FR,
34         TG_WT,
35         TG_DEL,
36         TG_RT,
37         TG_NR
38 };
39
40
41 /* extern ser_lock_t timer_group_lock[TG_NR]; */
42
43
44 #include "h_table.h"
45 #include "timer.h" 
46
47 /* Uni*x permissions for IPC */
48 #define IPC_PERMISSIONS 0666
49
50
51 int lock_initialize();
52 void lock_cleanup();
53 /*
54 #ifndef FAST_LOCK
55 static int init_semaphore_set( int size );
56 #endif
57 */
58
59 #ifdef DBG_LOCK
60 #define lock(_s) _lock( (_s), __FILE__, __FUNCTION__, __LINE__ )
61 #define unlock(_s) _unlock( (_s), __FILE__, __FUNCTION__, __LINE__ )
62 #else
63 #define lock(_s) _lock( (_s) )
64 #define unlock(_s) _unlock( (_s) )
65 #endif
66
67
68 int init_cell_lock( struct cell *cell );
69 int init_entry_lock( struct s_table* ht, struct entry *entry );
70
71
72 int release_cell_lock( struct cell *cell );
73 int release_entry_lock( struct entry *entry );
74 int release_timerlist_lock( struct timer *timerlist );
75
76
77 #ifndef FAST_LOCK
78 int change_semaphore( ser_lock_t* s  , int val );
79 #endif
80
81
82 /* lock semaphore s */
83 #ifdef DBG_LOCK
84 static inline int _lock( ser_lock_t* s , char *file, char *function,
85                                                         unsigned int line )
86 #else
87 static inline int _lock( ser_lock_t* s )
88 #endif
89 {
90 #ifdef DBG_LOCK
91         DBG("DEBUG: lock : entered from %s , %s(%d)\n", function, file, line );
92 #endif
93 #ifdef FAST_LOCK
94         get_lock(s);
95         return 0;
96 #else
97         return change_semaphore( s, -1 );
98 #endif
99 }
100
101
102
103 #ifdef DBG_LOCK
104 static inline int _unlock( ser_lock_t* s, char *file, char *function,
105                 unsigned int line )
106 #else
107 static inline int _unlock( ser_lock_t* s )
108 #endif
109 {
110 #ifdef DBG_LOCK
111         DBG("DEBUG: unlock : entered from %s, %s:%d\n", file, function, line );
112 #endif
113 #ifdef FAST_LOCK
114         release_lock(s);
115         return 0;
116 #else
117         return change_semaphore( s, +1 );
118 #endif
119 }
120
121 int init_timerlist_lock(  enum lists timerlist_id);
122
123
124 #endif
125