#ifndef ZABBIX_MUTEXS_H
#define ZABBIX_MUTEXS_H
#include "zbxcommon.h"
#include "zbxprof.h"
#ifdef _WINDOWS
# define ZBX_MUTEX_NULL NULL
# define ZBX_MUTEX_LOG zbx_mutex_create_per_process_name(L"ZBX_MUTEX_LOG")
# define ZBX_MUTEX_PERFSTAT zbx_mutex_create_per_process_name(L"ZBX_MUTEX_PERFSTAT")
typedef wchar_t * zbx_mutex_name_t;
typedef HANDLE zbx_mutex_t;
# define zbx_mutex_lock(mutex) __zbx_mutex_lock(__FILE__, __LINE__, mutex)
# define zbx_mutex_unlock(mutex) __zbx_mutex_unlock(__FILE__, __LINE__, mutex)
#else
typedef enum
{
ZBX_MUTEX_LOG = 0,
ZBX_MUTEX_CACHE,
ZBX_MUTEX_TRENDS,
ZBX_MUTEX_CACHE_IDS,
ZBX_MUTEX_SELFMON,
ZBX_MUTEX_CPUSTATS,
ZBX_MUTEX_DISKSTATS,
ZBX_MUTEX_VALUECACHE,
ZBX_MUTEX_VMWARE,
ZBX_MUTEX_SQLITE3,
ZBX_MUTEX_PROCSTAT,
ZBX_MUTEX_PROXY_HISTORY,
#ifdef HAVE_VMINFO_T_UPDATES
ZBX_MUTEX_KSTAT,
#endif
ZBX_MUTEX_MODBUS,
ZBX_MUTEX_TREND_FUNC,
ZBX_MUTEX_PROXY_BUFFER,
ZBX_MUTEX_COUNT
}
zbx_mutex_name_t;
typedef enum
{
ZBX_RWLOCK_CONFIG = 0,
ZBX_RWLOCK_CONFIG_HISTORY,
ZBX_RWLOCK_VALUECACHE,
ZBX_RWLOCK_COUNT,
}
zbx_rwlock_name_t;
#ifdef HAVE_PTHREAD_PROCESS_SHARED
# define ZBX_MUTEX_NULL NULL
# define ZBX_RWLOCK_NULL NULL
# define zbx_rwlock_wrlock(rwlock) \
\
do \
{ \
zbx_prof_start(__func__, ZBX_PROF_RWLOCK); \
__zbx_rwlock_wrlock(__FILE__, __LINE__, rwlock); \
zbx_prof_end_wait(); \
} \
while (0)
# define zbx_rwlock_rdlock(rwlock) \
\
do \
{ \
zbx_prof_start(__func__, ZBX_PROF_RWLOCK); \
__zbx_rwlock_rdlock(__FILE__, __LINE__, rwlock); \