--- libaitsess/src/sess.c 2011/09/07 21:06:56 1.3.2.3 +++ libaitsess/src/sess.c 2012/05/23 15:14:41 1.4.4.1 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: sess.c,v 1.3.2.3 2011/09/07 21:06:56 misho Exp $ +* $Id: sess.c,v 1.4.4.1 2012/05/23 15:14:41 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -49,9 +49,10 @@ SUCH DAMAGE. /* * sess_FreeValues() Free all values from value array allocated from sess_GetValues() + * * @ppsVals = Array strings * return: none -*/ + */ inline void sess_FreeValues(char *** __restrict ppsVals) { @@ -62,19 +63,20 @@ sess_FreeValues(char *** __restrict ppsVals) return; for (ptr = *ppsVals; *ptr; ptr++) - free(*ptr); - free(*ppsVals); + io_free(*ptr); + io_free(*ppsVals); *ppsVals = NULL; } /* * sess_GetValues() Get all values from session shared memory + * * @s = Session item * @ppsVals = Return array strings * return: -1 error: in parameter, !=-1 count of returned strings in ppsVals (must be free after use!) -*/ + */ int -sess_GetValues(tagSess * __restrict s, char ***ppsVals) +sess_GetValues(ait_sess_t * __restrict s, char ***ppsVals) { register int i; char **valz, *Shared = NULL; @@ -82,7 +84,7 @@ sess_GetValues(tagSess * __restrict s, char ***ppsVals if (!s || !ppsVals) return -1; - valz = malloc(sizeof(caddr_t)); + valz = io_malloc(sizeof(caddr_t)); if (!valz) { LOGERR; return -1; @@ -90,10 +92,10 @@ sess_GetValues(tagSess * __restrict s, char ***ppsVals *valz = NULL; // allocated memory & mirrored shared memory into this - Shared = malloc(s->eom); + Shared = io_malloc(s->eom); if (!Shared) { LOGERR; - free(valz); + io_free(valz); return -1; } else memcpy(Shared, s->addr, s->eom); @@ -105,33 +107,34 @@ sess_GetValues(tagSess * __restrict s, char ***ppsVals else i++; - valz = realloc(valz, (i + 1) * sizeof(caddr_t)); + valz = io_realloc(valz, (i + 1) * sizeof(caddr_t)); if (!valz) { LOGERR; - free(Shared); + io_free(Shared); return -1; } else valz[i] = NULL; - valz[i - 1] = strdup(peer); + valz[i - 1] = io_strdup(peer); } - free(Shared); + io_free(Shared); *ppsVals = valz; return i; } /* * sess_GetValue() Get value from session shared memory from attribute + * * @s = Session item * @csAttr = Attribute for search * @psVal = Return string buffer * @pnLen = Length of return string buffer, // *{pnLen} input is max_size of buffer & output is really taken bytes * return: 0 not found, -1 error: in parameter, >0 get position, if define item merged with IS_DEF -*/ + */ int -sess_GetValue(tagSess * __restrict s, const char *csAttr, char *psVal, int *pnLen) +sess_GetValue(ait_sess_t * __restrict s, const char *csAttr, char *psVal, int *pnLen) { register int i; int def = IS_VAL; @@ -148,7 +151,7 @@ sess_GetValue(tagSess * __restrict s, const char *csAt } // allocated memory & mirrored shared memory into this - Shared = malloc(s->eom); + Shared = io_malloc(s->eom); if (!Shared) { LOGERR; return -1; @@ -168,26 +171,27 @@ sess_GetValue(tagSess * __restrict s, const char *csAt } else def = IS_DEF; - free(Shared); + io_free(Shared); return i | def; } } - free(Shared); + io_free(Shared); return 0; } /* * sess_DelValue() Delete item from session shared memory + * * @s = Session item * @csAttr = Attribute for erasing * return: 0 Ok, -1 error: in parameter -*/ + */ int -sess_DelValue(tagSess * __restrict s, const char *csAttr) +sess_DelValue(ait_sess_t * __restrict s, const char *csAttr) { register int i; - int ret, attrlen; + int attrlen; char *Buffer, *Shared, szAttr[MAX_ATTRIBUTE]; char *peer, *p_brk; @@ -199,19 +203,19 @@ sess_DelValue(tagSess * __restrict s, const char *csAt strlcpy(szAttr, csAttr, sizeof szAttr); strlcat(szAttr, "=", sizeof szAttr); - Buffer = malloc(s->eom); + Buffer = io_malloc(s->eom); if (!Buffer) { LOGERR; return -1; } else memset(Buffer, 0, s->eom); - Shared = malloc(s->eom); + Shared = io_malloc(s->eom); if (!Shared) { LOGERR; - free(Buffer); + io_free(Buffer); return -1; } else { - DEC_SEMAPHORE(s, ret); + DEC_SEM(s); memcpy(Shared, s->addr, s->eom); } @@ -231,25 +235,26 @@ sess_DelValue(tagSess * __restrict s, const char *csAt if (s->type == SHARED_MAP) msync(s->addr, 0, MS_SYNC | MS_INVALIDATE); - ADD_SEMAPHORE(s, ret); - free(Shared); - free(Buffer); + INC_SEM(s); + io_free(Shared); + io_free(Buffer); return 0; } /* * sess_SetValue() Set item into session shared memory or update if find it + * * @s = Session item * @csAttr = Attribute * @psVal = Value * return: 0 nothing, -1 error: in parameter, >0 set position, if add item merged with IS_ADD and if define item merged with IS_DEF -*/ + */ int -sess_SetValue(tagSess * __restrict s, const char *csAttr, const char *psVal) +sess_SetValue(ait_sess_t * __restrict s, const char *csAttr, const char *psVal) { register int i; - int upd, ret, def = IS_VAL; + int upd, def = IS_VAL; char *Buffer, *Shared, szAttr[MAX_ATTRIBUTE]; char *peer, *p_brk; @@ -260,19 +265,19 @@ sess_SetValue(tagSess * __restrict s, const char *csAt strlcpy(szAttr, csAttr, sizeof szAttr); strlcat(szAttr, "=", sizeof szAttr); - Buffer = malloc(s->eom); + Buffer = io_malloc(s->eom); if (!Buffer) { LOGERR; return -1; } else memset(Buffer, 0, s->eom); - Shared = malloc(s->eom); + Shared = io_malloc(s->eom); if (!Shared) { LOGERR; - free(Buffer); + io_free(Buffer); return -1; } else { - DEC_SEMAPHORE(s, ret); + DEC_SEM(s); memcpy(Shared, s->addr, s->eom); } @@ -314,32 +319,36 @@ sess_SetValue(tagSess * __restrict s, const char *csAt if (s->type == SHARED_MAP) msync(s->addr, 0, MS_SYNC | MS_INVALIDATE); - ADD_SEMAPHORE(s, ret); - free(Shared); - free(Buffer); + INC_SEM(s); + io_free(Shared); + io_free(Buffer); return upd | def; } /* * sess_prepareSession() Attach to shared memory and de-marshaling data + * * @s = Session * @useDirect = Use direct shared memory if !=0 or snapshot of data to array * return: NULL error or no data, !=NULL array with variables, * after use must free resources with sess_doneSession() */ array_t * -sess_prepareSession(tagSess * __restrict s, u_char useDirect) +sess_prepareSession(ait_sess_t * __restrict s, char useDirect) { array_t *arr = NULL; sess_hdr_t *hdr; - int ret; assert(s); if (!s) { sess_SetErr(EINVAL, "Error:: invalid argument\n"); return NULL; } + if (s->addr) { + sess_SetErr(EINVAL, "Error:: already attached memory\n"); + return NULL; + } ATTACH_MEMORY(s); if (!s->addr) @@ -353,25 +362,26 @@ sess_prepareSession(tagSess * __restrict s, u_char use return NULL; } - DEC_SEMAPHORE(s, ret); - s->zcopy = useDirect; - arr = io_map2vals(s->addr + sizeof(sess_hdr_t), s->eom - sizeof(sess_hdr_t), + DEC_SEM(s); + s->zcpy = useDirect; + arr = io_map2vars(s->addr + sizeof(sess_hdr_t), s->eom - sizeof(sess_hdr_t), hdr->hdr_argc, useDirect); - ADD_SEMAPHORE(s, ret); + INC_SEM(s); - if (!s->zcopy) + if (!s->zcpy) DETACH_MEMORY(s); return arr; } /* * sess_doneSession() Free resources allocated with sess_prepareSession() + * * @s = Session * @arr = Array with variables for free * return: none */ void -sess_doneSession(tagSess * __restrict s, array_t ** __restrict arr) +sess_doneSession(ait_sess_t * __restrict s, array_t ** __restrict arr) { assert(s); if (!s) { @@ -379,7 +389,7 @@ sess_doneSession(tagSess * __restrict s, array_t ** __ return; } - if (!s->zcopy) + if (!s->zcpy) io_arrayFree(*arr); else DETACH_MEMORY(s); @@ -388,15 +398,16 @@ sess_doneSession(tagSess * __restrict s, array_t ** __ /* * sess_commitSession() Commit data to shared memory + * * @s = Session * @arr = Array with variables for save * return -1 error or !=-1 size of stored variables into shared memory */ int -sess_commitSession(tagSess * __restrict s, array_t * __restrict arr) +sess_commitSession(ait_sess_t * __restrict s, array_t * __restrict arr) { sess_hdr_t *hdr; - int rs, ret = 0; + int ret = 0; assert(s && arr); if (!s || !arr) { @@ -404,25 +415,21 @@ sess_commitSession(tagSess * __restrict s, array_t * _ return -1; } - if (!s->zcopy) - ATTACH_MEMORY(s); + ATTACH_MEMORY(s); if (!s->addr) { - if (!s->zcopy) - DETACH_MEMORY(s); - + DETACH_MEMORY(s); return -1; } else hdr = (sess_hdr_t*) s->addr; - DEC_SEMAPHORE(s, rs); - if ((ret = io_vals2map(s->addr + sizeof(sess_hdr_t), s->eom - sizeof(sess_hdr_t), arr)) != -1) { + DEC_SEM(s); + if ((ret = io_vars2map(s->addr + sizeof(sess_hdr_t), s->eom - sizeof(sess_hdr_t), arr)) != -1) { hdr->hdr_magic = SESS_AIT_MAGIC; hdr->hdr_argc = io_arraySize(arr); ret += sizeof(sess_hdr_t); } - ADD_SEMAPHORE(s, rs); + INC_SEM(s); - if (!s->zcopy) - DETACH_MEMORY(s); + DETACH_MEMORY(s); return ret; }