void clEvtContTestDbInit()
{
    ClRcT rc = CL_OK;
    ClUint32T noOfApp;

    rc = clCntLlistCreate(clEvtContSubKeyCompare, clEvtContSubDataDelete,
                          clEvtContSubDataDelete, CL_CNT_NON_UNIQUE_KEY,
                          &gEvtContSubInfo);
    if (CL_OK != rc)
    {
        clOsalPrintf("Creating linked list failed for sub \r\n");
        exit(-1);
    }

    rc = clCntLlistCreate(clEvtContPubKeyCompare, clEvtContPubDataDelete,
                          clEvtContPubDataDelete, CL_CNT_UNIQUE_KEY,
                          &gEvtContPubInfo);
    if (CL_OK != rc)
    {
        clOsalPrintf("Creating linked list failed for pub \r\n");
        exit(-1);
    }

    clEvtContGetApp(&noOfApp);
    clHeapAllocate(noOfApp * sizeof(ClEvtContSubInfoStorageT));

    return;
}
ClRcT clEvtTestAppInitialize(ClUint32T argc, ClCharT *argv[])
{
    ClRcT rc = CL_OK;
    ClEoExecutionObjT *pEoObj;

#if 0
    ClSvcHandleT svcHandle = { 0 };
    ClOsalTaskIdT taskId = 0;
#endif

    /*
     * Create the list to hold the mapping b/n Init Name & evtHandle 
     */
    rc = clCntLlistCreate(clEvtContInitKeyCompare, clEvtContInitDataDelete,
                          clEvtContInitDataDelete, CL_CNT_UNIQUE_KEY,
                          &gEvtTestInitInfo);
    if (CL_OK != rc)
    {
        clOsalPrintf("Creating linked list for Init Failed, rc[0x%X]\r\n", rc);
        return rc;
    }

    rc = clCntLlistCreate(clChanContainerKeyCompare, clChanContainerDataDelete,
                          clChanContainerDataDelete, CL_CNT_UNIQUE_KEY,
                          &gChanHandleInitInfo);
    if(rc!=CL_OK)
    {
        clOsalPrintf("Creating Linked List for Channel handles failed\n\r");
        return rc;
    }
    /*
     * Create a Mutex to lock the containers before accessing them 
     */
    rc = clOsalMutexCreate(&gEvtTestInitMutex);
    if (CL_OK != rc)
    {
        clOsalPrintf("Creating Mutex for Init Failed, rc[0x%X]\r\n", rc);
        return rc;
    }

    rc = clEoMyEoObjectGet(&pEoObj);
    rc = clEoClientInstall(pEoObj, CL_EO_NATIVE_COMPONENT_TABLE_ID,
                           gClEvtTestAppFuncList, (ClEoDataT) NULL,
                           (int) sizeof(gClEvtTestAppFuncList) /
                           (int) sizeof(ClEoPayloadWithReplyCallbackT));
    rc = clEvtCpmInit();

#if 0
    svcHandle.cpmHandle = &gEvtTestAppCpmHandle;
    rc = clDispatchThreadCreate(pEoObj, &taskId, svcHandle);
#endif

    return CL_OK;
}
ClRcT clTxnAgentListCreate(ClCntHandleT *pAgentCntHandle)
{
    ClRcT   rc  = CL_OK;
    CL_FUNC_ENTER();
    rc = clCntLlistCreate(_clTxnAgentCmpFn, _clTxnAgentDelFn, 
                                            _clTxnAgentDestroy,
                                            CL_CNT_UNIQUE_KEY,
                                            pAgentCntHandle);
    CL_FUNC_EXIT();
    return (CL_GET_ERROR_CODE(rc));
}
/*
 * The container creation api
 */
ClRcT clAlarmPayloadCntListCreate()
{
    ClRcT rc = CL_OK;

    clOsalMutexCreate (&gClAlarmPayloadCntMutex);
    
    rc = clCntLlistCreate(clAlarmPayloadCntCompare, 
                          clAlarmPayloadCntEntryDeleteCallback,
                          clAlarmPayloadCntEntryDestroyCallback, 
                          CL_CNT_UNIQUE_KEY, 
                          &gPayloadCntHandle );
    return rc;
}
/**
 * Create newly transaction-job definition
 */
ClRcT clTxnNewAppJobCreate(
        CL_OUT  ClTxnAppJobDefnPtrT  *pNewTxnJob)
{
    ClRcT               rc  = CL_OK;
    ClTxnAppJobDefnT    *pTxnJob;

    CL_FUNC_ENTER();

    if (NULL == pNewTxnJob)
    {
        CL_FUNC_EXIT();
        return CL_ERR_NULL_POINTER;
    }

    *pNewTxnJob = NULL;
    
    pTxnJob = (ClTxnAppJobDefnT *)clHeapAllocate( sizeof(ClTxnAppJobDefnT));
    if (NULL == pTxnJob)
    {
        CL_FUNC_EXIT();
        return CL_ERR_NO_MEMORY;
    }

    memset(pTxnJob, 0, sizeof(ClTxnAppJobDefnT));
    rc = clCntLlistCreate(_clTxnCmpKeyCompare,
                          _clTxnCompEntryDelete, _clTxnCompEntryDestroy,
                          CL_CNT_UNIQUE_KEY,
                          (ClCntHandleT *) &(pTxnJob->compList) );

    if (CL_OK != rc)
    {
        clHeapFree(pTxnJob);
    }
    else
    {
        CL_DEBUG_PRINT(CL_DEBUG_TRACE, ("Creating new txn-job %p, compList:%p", 
                        (ClPtrT) pTxnJob, (ClPtrT) pTxnJob->compList));
        *pNewTxnJob = pTxnJob;
    }

    CL_FUNC_EXIT();
    return (CL_GET_ERROR_CODE(rc));
}
/**
 * Creates new transaction definition instance
 */
ClRcT clTxnNewTxnDfnCreate(
        CL_OUT  ClTxnDefnPtrT    *pNewTxnDef)
{
    ClRcT   rc  = CL_OK;

    CL_FUNC_ENTER();
    if (NULL == pNewTxnDef)
    {
        CL_FUNC_EXIT();
        return (CL_ERR_NULL_POINTER);
    }
    
    *pNewTxnDef = (ClTxnDefnT *) clHeapCalloc(1,sizeof(ClTxnDefnT));

    if (NULL == *pNewTxnDef)
    {
        CL_FUNC_EXIT();
        return (CL_ERR_NO_MEMORY);
    }

    memset(*pNewTxnDef, 0, sizeof(ClTxnDefnT));

    /* Initialize data-structure for storing job and component details */
    rc = clCntLlistCreate(_clTxnJobKeyCompare,
                          _clTxnJobDelete, _clTxnJobDestroy,
                          CL_CNT_UNIQUE_KEY, 
                          (ClCntHandleT *) &( (*pNewTxnDef)->jobList));

    if (CL_OK != rc)
    {
        clHeapFree(*pNewTxnDef);
        *pNewTxnDef = NULL;
    }

    CL_FUNC_EXIT();
    return (rc);
}
ClRcT halObjCreate(ClUint32T omId,
                   ClCorMOIdPtrT moId,
                   ClHalObjectHandleT *const phalObjHandle)
{
    HalObjectT * phalObject = NULL;
    ClRcT ret=CL_OK;
#ifdef CL_DEBUG
    char aFunction[]="halObjCreate";
#endif

    CL_FUNC_ENTER();

    if (NULL == phalObjHandle)
    {
        CL_DEBUG_PRINT(CL_DEBUG_TRACE,("\n %s Error NULL Pointer  \n ",aFunction));
        CL_FUNC_EXIT();
        return (CL_HAL_SET_RC(CL_ERR_NULL_POINTER));
    }
    phalObject =(HalObjectT*) clHeapAllocate((ClUint32T)sizeof(HalObjectT));

    if (NULL == phalObject)
    {
        CL_DEBUG_PRINT(CL_DEBUG_TRACE,("\n %s Error Malloc Failed\n ",aFunction));
        CL_FUNC_EXIT();
        return (CL_HAL_SET_RC( CL_ERR_NO_MEMORY)) ;
    }

    memset(phalObject,0,sizeof(HalObjectT));

    phalObject->omId=omId;

    if(NULL != moId)
    {
        phalObject->moId = (ClCorMOIdPtrT) clHeapAllocate ((ClUint32T)sizeof(ClCorMOIdT));

        if (NULL == phalObject->moId)
        {
            clHeapFree (phalObject);
            CL_DEBUG_PRINT(CL_DEBUG_ERROR,("\n %s Error Malloc Failed\n ",aFunction));
            CL_FUNC_EXIT();
            return (CL_HAL_SET_RC( CL_ERR_NO_MEMORY)) ;
        }

        memset (phalObject->moId,0,sizeof(ClCorMOIdT));
        memcpy (phalObject->moId, moId, sizeof(ClCorMOIdT));
    }
    else
    {
        /* Error Condition */
        /* This needs to be uncommented after fixing the call to clOmObjectCreate &
        clOmCorAndOmObjectsCreate by passing hMOId ,sizeof(ClCorMOIdT) as the last 2parameters.
        As of now  NULL is being passed */
        CL_DEBUG_PRINT(CL_DEBUG_ERROR,("\n %s Error Invalid Parameter \n ",aFunction));
        CL_FUNC_EXIT();
        return (CL_HAL_SET_RC(CL_ERR_INVALID_PARAMETER));
    }

    ret = clCntLlistCreate(halKeyCompare,NULL,halObjContainerDestroy,CL_CNT_UNIQUE_KEY,
                           &(phalObject->hTableRefDevObject));
    if (CL_OK !=ret)
    {
        clHeapFree (phalObject);
        phalObject =NULL;
        CL_DEBUG_PRINT(CL_DEBUG_TRACE,("\n %s Error returned by \
        clCntLlistCreate \n ", aFunction));
        CL_FUNC_EXIT();
        return ret;
    }
ClRcT
_ckptMasterPeerListInfoCreate(ClIocNodeAddressT nodeAddr,
                              ClUint32T         credential,
                              ClUint32T         replicaCount)
{
    CkptPeerInfoT  *pPeerInfo = NULL;
    ClRcT          rc         = CL_OK;


    /*
     * Allocate memory for storing peer info.
     */
    if (NULL == (pPeerInfo = (CkptPeerInfoT*) clHeapCalloc(1, 
                    sizeof(CkptPeerInfoT))))
    {
        rc = CL_CKPT_ERR_NO_MEMORY;
        CKPT_DEBUG_E(("PeerInfo No Memory\n")); 
        return rc;
    }

    /*
     * Copy the passed info.
     */
    pPeerInfo->addr         = nodeAddr;
    pPeerInfo->credential   = credential;
    pPeerInfo->available    = CL_CKPT_NODE_AVAIL;
    pPeerInfo->replicaCount = replicaCount;

    /* 
     * Create the list to store the client hdls that
     * will be opened on that node.
     */
    rc = clCntLlistCreate(ckptCkptListKeyComp, ckptCkptListDeleteCallback,ckptCkptListDeleteCallback, CL_CNT_UNIQUE_KEY, &pPeerInfo->ckptList);
    CKPT_ERR_CHECK(CL_CKPT_SVR,CL_LOG_SEV_ERROR, ("CkptList create failed rc[0x %x]\n",rc), rc);

    /* 
     * Create the list to store the master hdls for checkpoints that
     * will be created on that node.
     */
    rc = clCntLlistCreate(ckptMastHdlListtKeyComp, ckptMastHdlListDeleteCallback, ckptMastHdlListDeleteCallback, CL_CNT_UNIQUE_KEY, &pPeerInfo->mastHdlList);
    CKPT_ERR_CHECK(CL_CKPT_SVR,CL_LOG_SEV_ERROR, ("MastHdlList create failed rc[0x %x]\n",rc), rc);

    if(credential == CL_CKPT_CREDENTIAL_POSITIVE)
        gCkptSvr->masterInfo.availPeerCount++;

    /*
     * Add the node to the master's peer list.
     */
    rc = clCntNodeAdd(gCkptSvr->masterInfo.peerList, (ClPtrT)(ClWordT)nodeAddr, (ClCntDataHandleT)pPeerInfo, NULL);
    CKPT_ERR_CHECK(CL_CKPT_SVR,CL_LOG_SEV_ERROR, ("PeerInfo Add is failed rc[0x %x]\n",rc), rc);
    return rc;        

exitOnError:    
    /*
     * Do the necessary cleanup.
     */
    if (pPeerInfo->ckptList != 0)
        clCntDelete(pPeerInfo->ckptList);
    if (pPeerInfo->mastHdlList != 0)
        clCntDelete(pPeerInfo->mastHdlList);
    clHeapFree(pPeerInfo);
    return rc;
}