--- libaitsess/src/aitsess.c 2008/08/28 13:18:30 1.1.1.1 +++ libaitsess/src/aitsess.c 2010/08/26 00:06:38 1.1.1.1.2.3 @@ -1,3 +1,11 @@ +/************************************************************************* +* (C) 2008 AITNET ltd - Sofia/Bulgaria - +* by Michael Pounov +* +* $Author: misho $ +* $Id: aitsess.c,v 1.1.1.1.2.3 2010/08/26 00:06:38 misho Exp $ +* +*************************************************************************/ #include "global.h" #include "aitsess.h" @@ -63,7 +71,7 @@ inline int initSession(const int cnID, const char *csF if (!access(csFName, F_OK)) ret = 1; // Build new key & new session - h = open(csFName, O_WRONLY | O_CREAT, 0640); + h = open(csFName, O_WRONLY | O_CREAT, MEM_MODE); if (h == -1) { LOGERR; free(*Sess); @@ -152,7 +160,7 @@ int map_createSession(const char *csFName, const int c memset(mem, 0, cnSize); // create semaphore & add 1 - (*Sess)->id.sid = sem_open(szSName[0], O_CREAT, 0644); + (*Sess)->id.sid = sem_open(szSName[0], O_CREAT, MEM_MODE); if ((*Sess)->id.sid == SEM_FAILED) { LOGERR; map_destroySession(csFName, Sess); @@ -162,7 +170,7 @@ int map_createSession(const char *csFName, const int c sem_post((*Sess)->id.sid); // create file for shared memory storage - (*Sess)->mem.fd = open(szSName[1], O_RDWR | O_CREAT, 0644); + (*Sess)->mem.fd = open(szSName[1], O_RDWR | O_CREAT, MEM_MODE); if ((*Sess)->mem.fd == -1) { LOGERR; map_destroySession(csFName, Sess); @@ -252,7 +260,7 @@ int ipc_createSession(const char *csFName, const int c } // create semaphore - (*Sess)->id.semid = semget((*Sess)->key, 1, 0644 | IPC_CREAT); + (*Sess)->id.semid = semget((*Sess)->key, 1, MEM_MODE | IPC_CREAT); if ((*Sess)->id.semid == -1) { LOGERR; ipc_destroySession(csFName, Sess); @@ -269,7 +277,7 @@ int ipc_createSession(const char *csFName, const int c } // create shared memory object - (*Sess)->mem.shmid = shmget((*Sess)->key, cnSize, 0644 | IPC_CREAT); + (*Sess)->mem.shmid = shmget((*Sess)->key, cnSize, MEM_MODE | IPC_CREAT); if ((*Sess)->mem.shmid == -1) { LOGERR; ipc_destroySession(csFName, Sess); @@ -387,6 +395,19 @@ inline void ipc_detachSession(tagSess * __restrict s) shmdt(s->addr); s->addr = NULL; } +} + +/* + * isAttached() Check for mapped/(attached) shared memory + * @s = Session item + * return: -1 null session item, 0 not attached, 1 attached memory +*/ +inline int isAttached(tagSess * __restrict s) +{ + if (!s) + return -1; + + return (s->addr ? 1 : 0); }