static ClRcT clAmsEntityTriggerRecoveryThreadCreate(void) { ClRcT rc = CL_OK; clAmsListHeadInit(&gClAmsEntityTriggerRecoveryCtrl.list); gClAmsEntityTriggerRecoveryCtrl.running = CL_TRUE; gClAmsEntityTriggerRecoveryCtrl.task = 0; rc = clOsalTaskCreateAttached("AMS-RECOVERY-THREAD", CL_OSAL_SCHED_OTHER, 0, 0, clAmsEntityTriggerRecoveryThread, NULL, &gClAmsEntityTriggerRecoveryCtrl.task); if(rc != CL_OK) { gClAmsEntityTriggerRecoveryCtrl.running = CL_FALSE; } return rc; }
ClRcT clLogUtilLibInitialize(void) { ClRcT rc = CL_OK; ClCharT *pEOName = NULL; if( gUtilLibInitialized == CL_TRUE ) { return CL_OK; } rc = clOsalMutexErrorCheckInit(&gLogMutex); if( CL_OK != rc ) { fprintf(stderr, "Mutex init failed rc[0x %x]\n", rc); return rc; } rc = clOsalCondInit(&gLogCond); if( CL_OK != rc ) { fprintf(stderr, "Cond init failed rc[0x %x]\n", rc); clOsalMutexDestroy(&gLogMutex); return rc; } pEOName = CL_EO_NAME; if(pEOName && !strncasecmp(pEOName, "LOG", 3)) { gClLogServer = CL_TRUE; } clLogDebugFilterInitialize(); gUtilLibInitialized = CL_TRUE; rc = clOsalTaskCreateAttached((ClCharT *)CL_LOG_UTIL_TASK_NAME, CL_OSAL_SCHED_OTHER, CL_OSAL_THREAD_PRI_NOT_APPLICABLE, CL_OSAL_MIN_STACK_SIZE, clLogDeferredHandler, NULL, &taskId); if( CL_OK != rc ) { fprintf(stderr, "Thread creation failed rc[0x %x]", rc); clOsalCondDestroy(&gLogCond); clOsalMutexDestroy(&gLogMutex); return rc; } return CL_OK; }
ClRcT clDispatchThreadCreate(ClEoExecutionObjT *eoObj, ClOsalTaskIdT *taskId, ClSvcHandleT svcHandle) { ClRcT rc = CL_OK; if (svcHandle.cpmHandle != NULL) { clCpmSelectionObjectGet(*(svcHandle.cpmHandle), &fd[numArea]); dispatch[numArea] = clCpmDispatch; handle[numArea] = svcHandle.cpmHandle; numArea++; } rc = clOsalTaskCreateAttached("handleResponse", CL_OSAL_SCHED_OTHER, CL_OSAL_THREAD_PRI_NOT_APPLICABLE, 0, clDispatchHandleAllCallBacks, eoObj, taskId); return rc; }
static ClRcT tsActiveTimersQueueCreate (void) { ClRcT returnCode = CL_ERR_INVALID_HANDLE; CL_FUNC_ENTER(); gActiveTimerQueue.pFirstTimer = NULL; gActiveTimerQueue.pLastTimer = NULL; returnCode = clOsalMutexCreate (&gActiveTimerQueue.timerMutex); if (returnCode != CL_OK) { CL_FUNC_EXIT(); return (returnCode); } gActiveTimerQueue.tickInMilliSec = gTimerConfig.timerResolution; /* spawn off the timer-task */ returnCode = clOsalTaskCreateAttached("TIMER TASK", CL_OSAL_SCHED_OTHER, CL_OSAL_THREAD_PRI_NOT_APPLICABLE, /* gTimerConfig.timerTaskPriority: Normally it would be this, but OTHER scheduling has no priority */ TIMER_TASK_STACK_SIZE, tsTimerTask, NULL, &gActiveTimerQueue.timerTaskId); if (returnCode != CL_OK) { if(CL_OK != clOsalMutexDelete (gActiveTimerQueue.timerMutex)) { CL_FUNC_EXIT(); return(returnCode); } CL_FUNC_EXIT(); return (returnCode); } gActiveTimerQueue.timerServiceInitialized = 1; CL_FUNC_EXIT(); return (CL_OK); }
ClRcT clLogFlushIntervalThreadCreate(ClLogSvrStreamDataT *pSvrStreamData, ClOsalTaskIdT *pTaskId) { ClRcT rc = CL_OK; /* create a mutex for this thread, no need to destroy this mutex as * memory is not allocated for this mutex */ rc = clOsalMutexInit_L(&pSvrStreamData->flushIntervalMutex); if( CL_OK != rc ) { clLogError("SVR", "FLU", "Mutex creation failed rc [0x %x]", rc); return rc; } rc = clOsalCondInit_L(&pSvrStreamData->flushIntervalCondvar); if( CL_OK != rc ) { clLogError("SVR", "FLU", "Mutex creation failed rc [0x %x]", rc); clOsalMutexDestroy_L(&pSvrStreamData->flushIntervalMutex); return rc; } pSvrStreamData->flushIntervalThreadStatus = CL_LOG_FLUSH_INTERVAL_STATUS_ACTIVE; rc = clOsalTaskCreateAttached(pSvrStreamData->shmName.pValue, CL_OSAL_SCHED_OTHER, CL_OSAL_THREAD_PRI_NOT_APPLICABLE, CL_OSAL_MIN_STACK_SIZE, clLogFlushIntervalThread, pSvrStreamData, pTaskId); if( CL_OK != rc ) { clLogError("SVR", "FLU", "Creating thread for flush interval fails rc[0x %x]", rc); clOsalCondDestroy(&pSvrStreamData->flushIntervalCondvar); clOsalMutexDestroy_L(&pSvrStreamData->flushIntervalMutex); return rc; } return rc; }
/* shmNameCreate(); map the shared memory; populate the Flusher data; clLogSvrFlusherThreadCreateNStart(); populate flusher.taskId */ static ClRcT clLogSvrShmOpenNFlusherCreate(ClLogSvrEoDataT *pSvrEoEntry, SaNameT *pStreamName, SaNameT *pStreamNodeName, ClStringT *pFileName, ClStringT *pFileLocation, ClCntNodeHandleT hSvrStreamNode, ClUint32T dsId) { ClRcT rc = CL_OK; ClInt32T fd = 0; ClLogStreamHeaderT *pStreamHeader = NULL; ClLogSvrStreamDataT *pSvrStreamData = NULL; ClUint32T headerSize = 0; ClLogSvrCommonEoDataT *pSvrCommonEoEntry = NULL; CL_LOG_DEBUG_TRACE(("Enter")); rc = clLogSvrEoEntryGet(NULL, &pSvrCommonEoEntry); if( CL_OK != rc ) { return rc; } rc = clCntNodeUserDataGet(pSvrEoEntry->hSvrStreamTable, hSvrStreamNode, (ClCntDataHandleT *) &pSvrStreamData); if( CL_OK != rc ) { CL_LOG_DEBUG_ERROR(("clCntDataForNodeGet(): rc[0x %x]\n", rc)); return rc; } if(pFileLocation->pValue) pSvrStreamData->fileOwnerAddr = clLogFileOwnerAddressFetch(pFileLocation); else pSvrStreamData->fileOwnerAddr = CL_IOC_RESERVED_ADDRESS; memcpy(&pSvrStreamData->fileName, pFileName, sizeof(pSvrStreamData->fileName)); memcpy(&pSvrStreamData->fileLocation, pFileLocation, sizeof(pSvrStreamData->fileLocation)); rc = clLogShmNameCreate(pStreamName, pStreamNodeName, &(pSvrStreamData->shmName)); if( CL_OK != rc ) { CL_LOG_DEBUG_ERROR(("clLogSvrShmNameCreate(): rc[0x %x]\n", rc)); return rc; } rc = clOsalShmOpen_L(pSvrStreamData->shmName.pValue, CL_LOG_SHM_CREATE_FLAGS, CL_LOG_SHM_MODE, &fd); if( CL_OK != rc ) { CL_LOG_DEBUG_ERROR(("clOsalShmOpen(): rc[0x %x]\n", rc)); CL_LOG_CLEANUP(clLogSvrShmNameDelete(&pSvrStreamData->shmName), CL_OK); return rc; } rc = clLogSvrShmMapAndGet(fd,(ClUint8T **) &pStreamHeader); if( CL_OK != rc ) { CL_LOG_CLEANUP(clOsalShmClose_L(fd), CL_OK); CL_LOG_CLEANUP(clLogSvrShmNameDelete(&pSvrStreamData->shmName), CL_OK); return rc; } pSvrStreamData->pStreamHeader = pStreamHeader; rc = clOsalShmClose_L(fd); if( CL_OK != rc ) { CL_LOG_CLEANUP(clOsalMunmap_L((ClPtrT) pStreamHeader, pStreamHeader->shmSize), CL_OK); pSvrStreamData->pStreamHeader = NULL; CL_LOG_CLEANUP(clLogSvrShmNameDelete(&pSvrStreamData->shmName), CL_OK); return rc; } #if 0 /* * FIXME- by this time, logMaster wont be availble, so postponing this call * to some time */ rc = clLogSvrStreamCurrentFilterGet(hSvrStreamNode, pStreamName, pStreamNodeName, pStreamHeader); if( CL_OK != rc ) { CL_LOG_CLEANUP(clOsalMunmap_L((ClPtrT) pStreamHeader, pStreamHeader->shmSize), CL_OK); CL_LOG_CLEANUP(clOsalShmUnlink_L(pSvrStreamData->shmName.pValue), CL_OK); CL_LOG_CLEANUP(clLogSvrShmNameDelete(&pSvrStreamData->shmName), CL_OK); return rc; } #endif pSvrStreamData->dsId = dsId; /* * streamHeader |--------------------| * | | * | | * maxMsgs|--------------------| * maxComps|--------------------| * pStreamRecords|--------------------| * | | * |--------------------| */ headerSize = CL_LOG_HEADER_SIZE_GET(pSvrCommonEoEntry->maxMsgs, pSvrCommonEoEntry->maxComponents); pSvrStreamData->pStreamRecords = ((ClUint8T *) (pSvrStreamData->pStreamHeader)) + headerSize; rc = clOsalTaskCreateAttached(pSvrStreamData->shmName.pValue, CL_OSAL_SCHED_OTHER, CL_OSAL_THREAD_PRI_NOT_APPLICABLE, CL_OSAL_MIN_STACK_SIZE, clLogFlusherStart, pSvrStreamData, &pSvrStreamData->flusherId); if( CL_OK != rc ) { CL_LOG_CLEANUP(clOsalMunmap_L((ClPtrT) pStreamHeader, pStreamHeader->shmSize), CL_OK); pSvrStreamData->pStreamHeader = NULL; CL_LOG_CLEANUP(clLogSvrShmNameDelete(&pSvrStreamData->shmName), CL_OK); return rc; } CL_LOG_DEBUG_TRACE(("Exit")); return rc; }