Esempio n. 1
0
void fwAvlDeleteTree(struct FwAvlTree* tree, void (*dataDelete)(void* data))
{
    struct FwQNode* node = fwAvlSerialize(tree);
    struct FwQNode* tmp;

    while(node != NULL)
    {
        if(dataDelete)
            dataDelete(node->treeNode->data);
        free(node->treeNode);
        tmp = node;
        node = node->next;
        free(tmp);
    }
    free(tree);
}
Esempio n. 2
0
/**************************************************************
*
*  dataCreate - create the DATA Object Data Structure & Semaphore, etc..
*
*
* RETURNS:
* DATAOBJ_ID  - if no error, NULL - if mallocing or semaphore creation failed
*
*/ 
DATAOBJ_ID dataCreate(int dataChannel,char *idStr)
/* int dataChannel - STM channel = 0 - 3, for the 4 four possible stm's in system */
{
  char tmpstr[80];
  DATAOBJ_ID pDataObj;
  int tDRid, tMTid, tDEid;
  short sr;
  long memval;
  int cnt,slen;
  unsigned long maxNumOfEntries;

  unsigned long memAddr;

  if (idStr == NULL)
  {
      slen = 16;
  }
  else
  {
     slen = strlen(idStr);
  }

  /* ------- malloc space for STM Object --------- */
  if ( (pDataObj = (DATA_OBJ *) malloc( sizeof(DATA_OBJ)) ) == NULL )
  {
    errLogSysRet(LOGIT,debugInfo,"dataCreate: ");
    return(NULL);
  }

  /* zero out structure so we don't free something by mistake */
  memset(pDataObj,0,sizeof(DATA_OBJ));

  pDataObj->dspAppVersion = getDspAppVer();

  pDataObj->dspMemSize = getMemSize();

  /* --------------  setup given or default ID string ---------------- */
  pDataObj->pIdStr = (char *) malloc(slen+2);
  if (pDataObj->pIdStr == NULL)
  {
     dataDelete(pDataObj);
     return(NULL);
  }
  if (idStr != NULL)
     strcpy(pDataObj->pIdStr,idStr);
  else
     strcpy(pDataObj->pIdStr,"dataObj");

  /* -------------------------------------------------------------------*/

  pDataObj->dataState = OK;

  /* create the STM State sync semaphore */
  pDataObj->pSemStateChg = semBCreate(SEM_Q_FIFO,SEM_EMPTY);

  /* create the STM Object Mutual Exclusion semaphore */
  pDataObj->pStmMutex = semMCreate(SEM_Q_PRIORITY | SEM_INVERSION_SAFE |
                                  SEM_DELETE_SAFE);

  if ( (pDataObj->pSemStateChg == NULL) ||
       (pDataObj->pStmMutex == NULL) )
  {
    errLogSysRet(LOGIT,debugInfo,"dataCreate: Could not create semaphore ");
     dataDelete(pDataObj);
     return(NULL);
  }

   /* Make initial buffer, msgQ, freelist, may expand */
   maxNumOfEntries = MAX_BUFFER_ALLOCATION / 
		   ( sizeof(FID_STAT_BLOCK) + sizeof(ITR_MSG) + sizeof(long));
  
   pDataObj->maxFidBlkBuffered = pDataObj->maxFreeList = maxNumOfEntries;

   pDataObj->pStatBlkArray = (FID_STAT_BLOCK*) malloc(sizeof(FID_STAT_BLOCK) *
                            maxNumOfEntries);

   /* Free List of Tags, typically 0 - maxNumFidBlkToAlloc */
   pDataObj->pTagFreeList = rngXBlkCreate(maxNumOfEntries,
                               "Data Addr Free Pool ",EVENT_STM_ALLOC_BLKS,1);

  DPRINT1(-1," %lu MBytes of Memory.\n",(pDataObj->dspMemSize/1048576L));
  pDataId = pDataObj;  /* set internal static pointer */
  return( pDataObj );
}