summaryrefslogtreecommitdiffstats
path: root/src/libs/zbxsys/mutexs.c
diff options
context:
space:
mode:
authorosmiy <osmiy@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2007-02-19 12:07:46 +0000
committerosmiy <osmiy@97f52cf1-0a1b-0410-bd0e-c28be96e8082>2007-02-19 12:07:46 +0000
commitbbadd78fb2a0ef624b1503f647157f58e93ab474 (patch)
treee8b09916e091a9882e858e3d6170e96514d17ba6 /src/libs/zbxsys/mutexs.c
parent46e7eba7e031f101a82973caae71c2a0c1882cca (diff)
downloadzabbix-bbadd78fb2a0ef624b1503f647157f58e93ab474.tar.gz
zabbix-bbadd78fb2a0ef624b1503f647157f58e93ab474.tar.xz
zabbix-bbadd78fb2a0ef624b1503f647157f58e93ab474.zip
- tested and fixed jabber messager (Eugene)
git-svn-id: svn://svn.zabbix.com/trunk@3836 97f52cf1-0a1b-0410-bd0e-c28be96e8082
Diffstat (limited to 'src/libs/zbxsys/mutexs.c')
-rw-r--r--src/libs/zbxsys/mutexs.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/libs/zbxsys/mutexs.c b/src/libs/zbxsys/mutexs.c
index c392e38d..292c1032 100644
--- a/src/libs/zbxsys/mutexs.c
+++ b/src/libs/zbxsys/mutexs.c
@@ -47,21 +47,23 @@
/******************************************************************************
* *
- * Function: zbx_mutex_create *
+ * Function: zbx_mutex_create_ext *
* *
* Purpose: Create the mutex *
* *
* Parameters: mutex - handle of mutex *
+ * name - name of mutex (index for nix system) *
+ * forced - remove mutex if exist (only for nix) *
* *
* Return value: If the function succeeds, the return ZBX_MUTEX_OK, *
* ZBX_MUTEX_ERROR on an error *
* *
* Author: Eugene Grigorjev *
* *
- * Comments: *
+ * Comments: you can use alias 'zbx_mutex_create' and 'zbx_mutex_create_force'*
* *
******************************************************************************/
-int zbx_mutex_create(ZBX_MUTEX *mutex, ZBX_MUTEX_NAME name)
+int zbx_mutex_create_ext(ZBX_MUTEX *mutex, ZBX_MUTEX_NAME name, unsigned char forced)
{
#if defined(_WINDOWS)
@@ -89,11 +91,11 @@ int zbx_mutex_create(ZBX_MUTEX *mutex, ZBX_MUTEX_NAME name)
}
}
+lbl_create:
if ( -1 != (ZBX_SEM_LIST_ID = semget(sem_key, ZBX_MUTEX_COUNT, IPC_CREAT | IPC_EXCL | 0666 /* 0022 */)) )
{
/* set default semaphore value */
semopts.val = 1;
-
for ( i = 0; i < ZBX_MUTEX_COUNT; i++ )
{
if(-1 == semctl(ZBX_SEM_LIST_ID, i, SETVAL, semopts))
@@ -110,6 +112,11 @@ int zbx_mutex_create(ZBX_MUTEX *mutex, ZBX_MUTEX_NAME name)
{
ZBX_SEM_LIST_ID = semget(sem_key, ZBX_MUTEX_COUNT, 0666 /* 0022 */);
semopts.buf = &seminfo;
+
+ if(forced) {
+ semctl(ZBX_SEM_LIST_ID, 0, IPC_RMID, 0);
+ goto lbl_create;
+ }
/* wait for initialization */
for ( i = 0; i < ZBX_MUTEX_MAX_TRIES; i++)