Source
xxxxxxxxxx
27
27
# define ZBX_MUTEX_NULL NULL
28
28
29
29
# define ZBX_MUTEX_LOG zbx_mutex_create_per_process_name(L"ZBX_MUTEX_LOG")
30
30
# define ZBX_MUTEX_PERFSTAT zbx_mutex_create_per_process_name(L"ZBX_MUTEX_PERFSTAT")
31
31
32
32
typedef wchar_t * zbx_mutex_name_t;
33
33
typedef HANDLE zbx_mutex_t;
34
34
35
35
# define zbx_mutex_lock(mutex) __zbx_mutex_lock(__FILE__, __LINE__, mutex)
36
36
# define zbx_mutex_unlock(mutex) __zbx_mutex_unlock(__FILE__, __LINE__, mutex)
37
-
38
-
# define zbx_mutex_glob_lock(mutex) __zbx_mutex_glob_lock(__FILE__, __LINE__, mutex)
39
-
# define zbx_mutex_glob_unlock(mutex) __zbx_mutex_glob_unlock(__FILE__, __LINE__, mutex)
40
-
# define zbx_mutex_glob_destroy(mutex) zbx_mutex_destroy(mutex)
41
37
#else /* not _WINDOWS */
42
38
typedef enum
43
39
{
44
40
ZBX_MUTEX_LOG = 0,
45
41
ZBX_MUTEX_CACHE,
46
42
ZBX_MUTEX_TRENDS,
47
43
ZBX_MUTEX_CACHE_IDS,
48
44
ZBX_MUTEX_SELFMON,
49
45
ZBX_MUTEX_CPUSTATS,
50
46
ZBX_MUTEX_DISKSTATS,
105
101
} \
106
102
while(0)
107
103
108
104
typedef pthread_mutex_t * zbx_mutex_t;
109
105
typedef pthread_rwlock_t * zbx_rwlock_t;
110
106
111
107
void __zbx_rwlock_wrlock(const char *filename, int line, zbx_rwlock_t rwlock);
112
108
void __zbx_rwlock_rdlock(const char *filename, int line, zbx_rwlock_t rwlock);
113
109
void __zbx_rwlock_unlock(const char *filename, int line, zbx_rwlock_t rwlock);
114
110
void zbx_rwlock_destroy(zbx_rwlock_t *rwlock);
111
+
void zbx_locks_disable(void);
112
+
void zbx_locks_enable(void);
115
113
#else /* fallback to semaphores if read-write locks are not available */
116
114
# define ZBX_RWLOCK_NULL -1
117
115
# define ZBX_MUTEX_NULL -1
118
116
119
117
# define zbx_rwlock_wrlock(mutex) \
120
118
\
121
119
do \
122
120
{ \
123
121
zbx_prof_start(__func__, ZBX_PROF_MUTEX); \
124
122
__zbx_mutex_lock(__FILE__, __LINE__, mutex); \
143
141
__zbx_mutex_unlock(__FILE__, __LINE__, mutex); \
144
142
zbx_prof_end(); \
145
143
} \
146
144
while(0)
147
145
148
146
# define zbx_rwlock_destroy(rwlock) zbx_mutex_destroy(rwlock)
149
147
150
148
typedef int zbx_mutex_t;
151
149
typedef int zbx_rwlock_t;
152
150
#endif
153
-
154
-
#if defined(HAVE_PTHREAD_PROCESS_SHARED) || defined(_WINDOWS)
155
-
void zbx_locks_disable(void);
156
-
void zbx_locks_enable(void);
157
-
#endif
158
-
159
151
int zbx_locks_create(char **error);
160
152
void zbx_locks_destroy(void);
161
153
int zbx_rwlock_create(zbx_rwlock_t *rwlock, zbx_rwlock_name_t name, char **error);
162
154
zbx_mutex_t zbx_mutex_addr_get(zbx_mutex_name_t mutex_name);
163
155
zbx_rwlock_t zbx_rwlock_addr_get(zbx_rwlock_name_t rwlock_name);
164
156
165
157
# define zbx_mutex_lock(mutex) \
166
158
\
167
159
do \
168
160
{ \
182
174
while(0)
183
175
#endif /* _WINDOWS */
184
176
185
177
int zbx_mutex_create(zbx_mutex_t *mutex, zbx_mutex_name_t name, char **error);
186
178
void __zbx_mutex_lock(const char *filename, int line, zbx_mutex_t mutex);
187
179
void __zbx_mutex_unlock(const char *filename, int line, zbx_mutex_t mutex);
188
180
void zbx_mutex_destroy(zbx_mutex_t *mutex);
189
181
190
182
#ifdef _WINDOWS
191
183
zbx_mutex_name_t zbx_mutex_create_per_process_name(const zbx_mutex_name_t prefix);
192
-
int zbx_mutex_glob_create(zbx_mutex_t *mutex, zbx_mutex_name_t name, char **error);
193
-
void __zbx_mutex_glob_unlock(const char *filename, int line, zbx_mutex_t mutex);
194
184
#endif
195
185
196
186
#endif /* ZABBIX_MUTEXS_H */