Diff for /libaitsess/src/sess.c between versions 1.3 and 1.3.2.1

version 1.3, 2011/09/07 13:11:56 version 1.3.2.1, 2011/09/07 15:52:35
Line 323  sess_SetValue(tagSess * __restrict s, const char *csAt Line 323  sess_SetValue(tagSess * __restrict s, const char *csAt
         free(Buffer);          free(Buffer);
         return upd | def;          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)
   {
           array_t *arr = NULL;
           sess_hdr_t *hdr;
           int ret;
   
           assert(s);
           if (!s) {
                   sess_SetErr(EINVAL, "Error:: invalid argument\n");
                   return NULL;
           }
   
           ATTACH_MEMORY(s);
           if (!s->addr)
                   return NULL;
           else
                   hdr = (sess_hdr_t*) s->addr;
           if (hdr->hdr_magic != SESS_AIT_MAGIC) {
                   DETACH_MEMORY(s);
   
                   sess_SetErr(EINVAL, "Error:: shared memory not contains values with proper format\n");
                   return NULL;
           }
   
           DEC_SEMAPHORE(s, ret);
           s->zcopy = useDirect;
           arr = io_map2vals(s->addr + sizeof(sess_hdr_t), s->eom - sizeof(sess_hdr_t), 
                           hdr->hdr_argc, useDirect);
           ADD_SEMAPHORE(s, ret);
   
           if (!s->zcopy)
                   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)
   {
           assert(s);
           if (!s) {
                   sess_SetErr(EINVAL, "Error:: invalid argument\n");
                   return;
           }
   
           if (!s->zcopy)
                   io_arrayFree(*arr);
           else
                   DETACH_MEMORY(s);
           io_arrayDestroy(arr);
   }
   
   /*
    * 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_hdr_t *hdr;
           int rs, ret = 0;
   
           assert(s && arr);
           if (!s || !arr) {
                   sess_SetErr(EINVAL, "Error:: invalid argument\n");
                   return -1;
           }
   
           if (!s->zcopy)
                   ATTACH_MEMORY(s);
           if (!s->addr) {
                   if (!s->zcopy)
                           DETACH_MEMORY(s);
   
                   return -1;
           } else
                   hdr = (sess_hdr_t*) s->addr;
           if (hdr->hdr_magic != SESS_AIT_MAGIC) {
                   if (!s->zcopy)
                           DETACH_MEMORY(s);
   
                   sess_SetErr(EINVAL, "Error:: shared memory not contains values with proper format\n");
                   return -1;
           }
   
           DEC_SEMAPHORE(s, rs);
           if ((ret = io_vals2map(s->addr + sizeof(sess_hdr_t), s->eom - sizeof(sess_hdr_t), arr)) != -1) {
                   hdr->hdr_argc = io_arraySize(arr);
                   ret += sizeof(sess_hdr_t);
           }
           ADD_SEMAPHORE(s, rs);
   
           if (!s->zcopy)
                   DETACH_MEMORY(s);
           return ret;
   }

Removed from v.1.3  
changed lines
  Added in v.1.3.2.1


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>