memory access syncing protection added
[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
13
14 /* typedef to structure we use for mutexing;
15    currently, index to a semaphore set identifier now */
16 typedef struct {
17         int semaphore_set;
18         int semaphore_index;
19 } ser_lock_t;
20
21 enum timer_groups {
22         TG_FR,
23         TG_WT,
24         TG_DEL,
25         TG_RT,
26         TG_NR
27 };
28
29 extern ser_lock_t timer_group_lock[TG_NR];
30
31
32 #include "h_table.h"
33 #include "timer.h"
34
35 /* Uni*x permissions for IPC */
36 #define IPC_PERMISSIONS 0666
37
38
39 int lock_initialize();
40 static int init_semaphore_set( int size );
41 void lock_cleanup();
42
43
44 #ifdef DBG_LOCK
45 int _lock( ser_lock_t s , char *file, char *function, unsigned int line );
46 int _unlock( ser_lock_t s, char *file, char *function, unsigned int line );
47 #       define lock(_s) _lock( (_s), __FILE__, __FUNCTION__, __LINE__ )
48 #       define unlock(_s) _unlock( (_s), __FILE__, __FUNCTION__, __LINE__ )
49 #else
50 int _lock( ser_lock_t s );
51 int _unlock( ser_lock_t s );
52 #       define lock(_s) _lock( (_s) )
53 #       define unlock(_s) _unlock( (_s) )
54 #endif
55
56 static int change_semaphore( ser_lock_t s  , int val );
57
58 int init_cell_lock( struct cell *cell );
59 int init_entry_lock( struct s_table* hash_table, struct entry *entry );
60
61 int release_cell_lock( struct cell *cell );
62 int release_entry_lock( struct entry *entry );
63 int release_timerlist_lock( struct timer *timerlist );
64
65 #endif
66