ClRcT clBitmapBuffer2BitmapGet(ClUint32T listLen, ClUint8T *pPositionList, ClBitmapHandleT *phBitmap) { ClRcT rc = CL_OK; ClUint32T nBits = 0; ClUint32T bitNum = 0; ClUint32T bitIdx = 0; ClUint32T byteIdx = 0; CL_DEBUG_PRINT(CL_DEBUG_TRACE, ("Enter")); if( (NULL == pPositionList) || (NULL == phBitmap) ) { CL_DEBUG_PRINT(CL_DEBUG_ERROR, ("Null pointer")); return CL_BITMAP_RC(CL_ERR_NULL_POINTER); } nBits = listLen * CL_BM_BITS_IN_BYTE; rc = clBitmapCreate(phBitmap, nBits); if( CL_OK != rc ) { CL_DEBUG_PRINT(CL_DEBUG_ERROR, ("clBitmapCreate(): rc[0x %x]", rc)); return rc; } for(bitNum = 0; bitNum < nBits; bitNum++) { byteIdx = bitNum / CL_BM_BITS_IN_BYTE; bitIdx = bitNum % CL_BM_BITS_IN_BYTE; if( (*(pPositionList + byteIdx)) & (0x1 << bitIdx) ) { rc = clBitmapBitSet(*phBitmap, bitNum); if( CL_OK != rc ) { ClRcT rc2 = CL_OK; CL_DEBUG_PRINT(CL_DEBUG_ERROR, ("clBitmapBitSet(): rc[0x %x]", rc)); if( (rc2 = clBitmapDestroy(*phBitmap) ) != CL_OK ) { CL_DEBUG_PRINT(CL_DEBUG_ERROR, ("clBitmapDestroy(): rc[%#x]", rc2)); } return rc; } } } CL_DEBUG_PRINT(CL_DEBUG_TRACE, ("Exit")); return rc; }
ClRcT clLogStreamOwnerCkptDsIdGet(ClLogSOEoDataT *pSoEoEntry, ClUint32T *pDsId) { ClRcT rc = CL_OK; ClLogSvrCommonEoDataT *pCommonEoData = NULL; ClUint32T dsId = 0; CL_LOG_DEBUG_TRACE(("Enter")); rc = clLogStreamOwnerEoEntryGet(NULL, &pCommonEoData); if( CL_OK != rc ) { return rc; } dsId = pSoEoEntry->dsIdCnt; dsId++; rc = clBitmapBitSet(pSoEoEntry->hDsIdMap, dsId); if( CL_OK != rc ) { CL_LOG_DEBUG_ERROR(("clBitmapBitSet(): rc[0x %x]", rc)); return rc; } rc = clCkptLibraryCkptDataSetCreate(pCommonEoData->hLibCkpt, (SaNameT *) &gSOLocalCkptName, dsId, 0, 0, clLogStreamOwnerEntrySerialiser, clLogSOStreamEntryRecreate); if( CL_OK != rc ) { CL_LOG_DEBUG_ERROR(("clCkptLibraryCkptDataSetCreate(): rc[0x %x]", rc)); CL_LOG_CLEANUP(clBitmapBitClear(pSoEoEntry->hDsIdMap, dsId), CL_OK); return rc; } pSoEoEntry->dsIdCnt = dsId; *pDsId = dsId; CL_LOG_CLEANUP(clCkptLibraryCkptDataSetWrite(pCommonEoData->hLibCkpt, (SaNameT *) &gSOLocalCkptName, CL_LOG_SO_DSID_START, pSoEoEntry), CL_OK); CL_LOG_DEBUG_TRACE(("Exit")); return rc; }
ClRcT clLogInitHandleBitmapFileAdd(ClLogHandleT hLog, ClLogFileHandleT hFileHdlr) { ClRcT rc = CL_OK; ClLogInitHandleDataT *pData = NULL; ClLogClntEoDataT *pClntEoEntry = NULL; CL_LOG_DEBUG_TRACE(("Enter")); rc = clLogClntEoEntryGet(&pClntEoEntry); if( CL_OK != rc ) { CL_LOG_DEBUG_ERROR(("clLogClntEoEntryGet(): rc[0x %x]", rc)); return rc; } rc = clHandleCheckout(pClntEoEntry->hClntHandleDB, hLog, (void **) (&pData)); if( CL_OK != rc ) { CL_LOG_DEBUG_ERROR(("clHandleCheckout(): rc[0x %x]\n", rc)); return rc; } rc = clBitmapBitSet(pData->hFileBitmap, hFileHdlr); if( CL_OK != rc ) { CL_LOG_DEBUG_ERROR(("clBitmapBitSet(): rc[0x %x]", rc)); CL_LOG_CLEANUP(clHandleCheckin(pClntEoEntry->hClntHandleDB, hLog), CL_OK); return rc; } rc = clHandleCheckin(pClntEoEntry->hClntHandleDB, hLog); if( CL_OK != rc ) { CL_LOG_DEBUG_ERROR(("clHandleCheckin(): rc[0x %x]", rc)); return rc; } CL_LOG_DEBUG_TRACE(("Exit")); return rc; }
ClRcT clBitmapPositionList2BitmapGet(ClUint32T listLen, ClUint32T *pPositionList, ClBitmapHandleT *phBitmap) { ClRcT rc = CL_OK; ClUint32T bitNum = 0; ClUint32T length = 0; CL_DEBUG_PRINT(CL_DEBUG_TRACE, ("Enter")); if( (NULL == pPositionList) || (NULL == phBitmap) ) { CL_DEBUG_PRINT(CL_DEBUG_ERROR, ("Null pointer")); return CL_BITMAP_RC(CL_ERR_NULL_POINTER); } length = pPositionList[listLen - 1]; rc = clBitmapCreate(phBitmap, length); if( CL_OK != rc ) { CL_DEBUG_PRINT(CL_DEBUG_ERROR, ("clBitmapCreate(): rc[0x %x]", rc)); return rc; } for(bitNum = 0; bitNum < listLen; bitNum++) { rc = clBitmapBitSet(*phBitmap, pPositionList[bitNum]); if( CL_OK != rc ) { ClRcT rc2 = CL_OK; CL_DEBUG_PRINT(CL_DEBUG_ERROR, ("clBitmapBitSet(): rc[0x %x]", rc)); if( (rc2 = clBitmapDestroy(*phBitmap) ) != CL_OK) { CL_DEBUG_PRINT(CL_DEBUG_ERROR, ("clBitmapDestroy(): rc[%#x]", rc2)); } return rc; } } CL_DEBUG_PRINT(CL_DEBUG_TRACE, ("Exit")); return rc; }
static ClRcT clLogCkptDsIdGet(ClLogSvrEoDataT *pSvrEoEntry, ClUint32T *pDsId) { ClRcT rc = CL_OK; CL_LOG_DEBUG_TRACE(("Enter")); pSvrEoEntry->nextDsId++; *pDsId = pSvrEoEntry->nextDsId; rc = clBitmapBitSet(pSvrEoEntry->hDsIdMap, *pDsId); if( CL_OK != rc ) { CL_LOG_DEBUG_ERROR(("clBitmapBitSet(): rc[0x %x]", rc)); pSvrEoEntry->nextDsId--; return rc; } CL_LOG_DEBUG_TRACE(("Exit")); return CL_OK; }
ClRcT clBitmapBufferBitsCopy(ClUint32T listLen, ClUint8T *pPositionList, ClBitmapHandleT hBitmap) { ClRcT rc = CL_OK; ClUint32T nBits = 0; ClUint32T bitNum = 0; ClUint32T bitIdx = 0; ClUint32T byteIdx = 0; CL_DEBUG_PRINT(CL_DEBUG_TRACE, ("Enter")); if( NULL == pPositionList ) { CL_DEBUG_PRINT(CL_DEBUG_ERROR, ("Null pointer")); return CL_BITMAP_RC(CL_ERR_NULL_POINTER); } nBits = listLen * CL_BM_BITS_IN_BYTE; for(bitNum = 0; bitNum < nBits; bitNum++) { byteIdx = bitNum / CL_BM_BITS_IN_BYTE; bitIdx = bitNum % CL_BM_BITS_IN_BYTE; if( (*(pPositionList + byteIdx)) & (0x1 << bitIdx) ) { rc = clBitmapBitSet(hBitmap, bitNum); if( CL_OK != rc ) { CL_DEBUG_PRINT(CL_DEBUG_ERROR, ("clBitmapBitSet(): rc[0x %x]", rc)); return rc; } } } CL_DEBUG_PRINT(CL_DEBUG_TRACE, ("Exit")); return rc; }
ClRcT clLogDsIdMapUnpack(ClBufferHandleT msg, ClLogSOEoDataT *pSoEoEntry) { ClRcT rc = CL_OK; ClUint32T count = 0; ClUint32T dsId = 0; CL_LOG_DEBUG_TRACE(("Enter")); rc = clXdrUnmarshallClUint32T(msg, &pSoEoEntry->dsIdCnt); if( CL_OK != rc ) { CL_LOG_DEBUG_ERROR(("clXdrUnmarshallClUint32T(): rc[0x %x]", rc)); return rc; } for( count = 2; count < pSoEoEntry->dsIdCnt ; count++) { rc = clXdrUnmarshallClUint32T(msg, &dsId); if( CL_OK != rc ) { CL_LOG_DEBUG_ERROR(("clXdrUnmarshallClUint32T(): rc[0x %x]", rc)); return rc; } rc = clBitmapBitSet(pSoEoEntry->hDsIdMap, dsId); if( CL_OK != rc ) { CL_LOG_DEBUG_ERROR(("clBitmapBitSet(): rc[0x %x]", rc)); return rc; } } CL_LOG_DEBUG_TRACE(("Exit")); return rc; }
ClRcT clLogClntStreamOpen(ClLogHandleT hLog, SaNameT *pStreamName, SaNameT *pNodeName, ClStringT *pShmName, ClUint32T shmSize, ClLogStreamHandleT *phStream, ClUint32T recSize) { ClRcT rc = CL_OK; ClLogClntEoDataT *pClntEoEntry = NULL; ClBoolT addedTable = CL_FALSE; ClBoolT addedEntry = CL_FALSE; ClCntNodeHandleT hClntStreamNode = CL_HANDLE_INVALID_VALUE; ClLogClntStreamDataT *pUserData = NULL; CL_LOG_DEBUG_TRACE(("Enter")); CL_LOG_PARAM_CHK((NULL == pStreamName), CL_LOG_RC(CL_ERR_NULL_POINTER)); CL_LOG_PARAM_CHK((NULL == pNodeName), CL_LOG_RC(CL_ERR_NULL_POINTER)); CL_LOG_PARAM_CHK((NULL == pShmName), CL_LOG_RC(CL_ERR_NULL_POINTER)); CL_LOG_PARAM_CHK((sizeof(ClLogStreamHeaderT) > shmSize), CL_LOG_RC(CL_ERR_INVALID_PARAMETER)); CL_LOG_PARAM_CHK((NULL == phStream), CL_LOG_RC(CL_ERR_NULL_POINTER)); rc = clLogClntEoEntryGet(&pClntEoEntry); if( CL_OK != rc ) { CL_LOG_DEBUG_ERROR(("clLogClntEoEntryGet(): rc[0x %x]", rc)); return rc; } rc = clOsalMutexLock_L(&(pClntEoEntry->clntStreamTblLock)); if( CL_OK != rc ) { CL_LOG_DEBUG_ERROR(("clOsalMutexLock(): rc[0x %x]", rc)); return rc; } if( CL_HANDLE_INVALID_VALUE == pClntEoEntry->hClntStreamTable ) { rc = clCntHashtblCreate(pClntEoEntry->maxStreams, clLogStreamKeyCompare, clLogStreamHashFn, clLogClntStreamDeleteCb, clLogClntStreamDeleteCb, CL_CNT_UNIQUE_KEY, &(pClntEoEntry->hClntStreamTable)); if( CL_OK != rc ) { CL_LOG_DEBUG_ERROR(("clCntHashtblCreate(): rc[0x %x]", rc)); CL_LOG_CLEANUP( clOsalMutexUnlock_L(&(pClntEoEntry->clntStreamTblLock)),CL_OK); return rc; } addedTable = CL_TRUE; CL_LOG_DEBUG_VERBOSE(("Created the HashTable")); } rc = clLogClntStreamEntryGet(pClntEoEntry, pStreamName, pNodeName, pShmName, shmSize, &hClntStreamNode, &addedEntry); if( CL_OK != rc) { if( CL_TRUE == addedTable ) { CL_LOG_CLEANUP(clCntDelete(pClntEoEntry->hClntStreamTable), CL_OK); } CL_LOG_CLEANUP(clOsalMutexUnlock_L(&(pClntEoEntry->clntStreamTblLock)), CL_OK); return rc; } CL_LOG_DEBUG_VERBOSE(("Got the stream entry")); rc = clLogHandleStreamHandleCreate(hLog, hClntStreamNode, phStream); if( CL_OK != rc) { if( CL_TRUE == addedEntry ) { CL_LOG_CLEANUP(clCntNodeDelete(pClntEoEntry->hClntStreamTable, hClntStreamNode), CL_OK); } if( CL_TRUE == addedTable ) { CL_LOG_CLEANUP(clCntDelete(pClntEoEntry->hClntStreamTable), CL_OK); } CL_LOG_CLEANUP(clOsalMutexUnlock_L(&(pClntEoEntry->clntStreamTblLock)), CL_OK); return rc; } CL_LOG_DEBUG_VERBOSE(("Created the streamhandle")); rc = clCntNodeUserDataGet(pClntEoEntry->hClntStreamTable, hClntStreamNode, (ClCntDataHandleT *) &pUserData); if( CL_OK != rc ) { CL_LOG_CLEANUP(clHandleDestroy(pClntEoEntry->hClntHandleDB, *phStream), CL_OK); *phStream = CL_HANDLE_INVALID_VALUE; if( CL_TRUE == addedEntry ) { CL_LOG_CLEANUP(clCntNodeDelete(pClntEoEntry->hClntStreamTable, hClntStreamNode), CL_OK); } if( CL_TRUE == addedTable ) { CL_LOG_CLEANUP(clCntDelete(pClntEoEntry->hClntStreamTable), CL_OK); } CL_LOG_CLEANUP(clOsalMutexUnlock_L(&(pClntEoEntry->clntStreamTblLock)), CL_OK); return rc; } #ifdef NO_SAF pUserData->recSize=recSize; #endif CL_LOG_DEBUG_VERBOSE(("Got stream entry")); rc = clBitmapBitSet(pUserData->hStreamBitmap, CL_HDL_IDX(*phStream)); if( CL_OK != rc ) { CL_LOG_CLEANUP(clHandleDestroy(pClntEoEntry->hClntHandleDB, *phStream), CL_OK); *phStream = CL_HANDLE_INVALID_VALUE; if( CL_TRUE == addedEntry ) { CL_LOG_CLEANUP(clCntNodeDelete(pClntEoEntry->hClntStreamTable, hClntStreamNode), CL_OK); } if( CL_TRUE == addedTable ) { CL_LOG_CLEANUP(clCntDelete(pClntEoEntry->hClntStreamTable), CL_OK); } CL_LOG_CLEANUP(clOsalMutexUnlock_L(&(pClntEoEntry->clntStreamTblLock)), CL_OK); return rc; } CL_LOG_DEBUG_VERBOSE(("Updated stream bitmap")); rc = clLogHandleInitHandleStreamAdd(hLog, *phStream); if( CL_OK != rc ) { CL_LOG_CLEANUP(clBitmapBitClear(pUserData->hStreamBitmap, CL_HDL_IDX(*phStream)), CL_OK); CL_LOG_CLEANUP(clHandleDestroy(pClntEoEntry->hClntHandleDB, *phStream), CL_OK); *phStream = CL_HANDLE_INVALID_VALUE; if( CL_TRUE == addedEntry ) { CL_LOG_CLEANUP(clCntNodeDelete(pClntEoEntry->hClntStreamTable, hClntStreamNode), CL_OK); } if( CL_TRUE == addedTable ) { CL_LOG_CLEANUP(clCntDelete(pClntEoEntry->hClntStreamTable), CL_OK); } CL_LOG_CLEANUP(clOsalMutexUnlock_L(&(pClntEoEntry->clntStreamTblLock)), CL_OK); return rc; } CL_LOG_DEBUG_VERBOSE(("Updated init handle")); rc = clOsalMutexUnlock_L(&(pClntEoEntry->clntStreamTblLock)); if( CL_OK != rc ) { CL_LOG_DEBUG_ERROR(("clOsalMutexUnlock(): rc[0x %x]", rc)); return rc; } CL_LOG_DEBUG_TRACE(("Exit")); return rc; }
static ClRcT clLogMasterStreamTableRecreate(ClLogSvrCommonEoDataT *pCommonEoEntry, ClBufferHandleT hFileEntryBuf, ClLogFileDataT *pFileData) { ClRcT rc = CL_OK; ClLogStreamKeyT streamKey = {{0}}; ClLogStreamKeyT *pStreamKey = NULL; ClLogMasterStreamDataT *pStreamData = NULL; ClCntNodeHandleT hStreamNode = CL_HANDLE_INVALID_VALUE; ClUint32T bitNum = 0; ClLogMasterEoDataT *pMasterEoEntry = NULL; CL_LOG_DEBUG_TRACE(("Enter")); rc = clLogMasterEoEntryGet(&pMasterEoEntry, &pCommonEoEntry); if( CL_OK != rc ) { return rc; } rc = clXdrUnmarshallSaNameT(hFileEntryBuf, &(streamKey.streamName)); if( CL_OK != rc ) { CL_LOG_DEBUG_ERROR(("clXdrMarshallSaNameT(): rc[0x %x]", rc)); return rc; } rc = clXdrUnmarshallSaNameT(hFileEntryBuf, &(streamKey.streamScopeNode)); if( CL_OK != rc ) { CL_LOG_DEBUG_ERROR(("clXdrMarshallSaNameT(): rc[0x %x]", rc)); return rc; } rc = clLogStreamKeyCreate(&streamKey.streamName, &streamKey.streamScopeNode, pCommonEoEntry->maxStreams, &pStreamKey); if( CL_OK != rc ) { return rc; } pStreamData = (ClLogMasterStreamDataT*) clHeapCalloc(1, sizeof(ClLogMasterStreamDataT)); if( NULL == pStreamData ) { CL_LOG_DEBUG_ERROR(("clHeapCalloc()")); clLogStreamKeyDestroy(pStreamKey); return rc; } rc = clXdrUnmarshallClUint64T(hFileEntryBuf, &(pStreamData->streamMcastAddr)); if( CL_OK != rc ) { CL_LOG_DEBUG_ERROR(("clXdrMarshallClUint64T(): rc[0x %x]", rc)); clHeapFree(pStreamData); clLogStreamKeyDestroy(pStreamKey); return rc; } rc = clXdrUnmarshallClUint16T(hFileEntryBuf, &(pStreamData->streamId)); if( CL_OK != rc ) { CL_LOG_DEBUG_ERROR(("clXdrMarshallClUint16T(): rc[0x %x]", rc)); clHeapFree(pStreamData); clLogStreamKeyDestroy(pStreamKey); return rc; } rc = clCntNodeAddAndNodeGet(pFileData->hStreamTable, (ClCntKeyHandleT) pStreamKey, (ClCntDataHandleT) pStreamData, NULL, &hStreamNode); if( CL_OK != rc ) { CL_LOG_DEBUG_ERROR(("clCntNodeAdd(): rc[0x %x]", rc)); clHeapFree(pStreamData); clLogStreamKeyDestroy(pStreamKey); return rc; } /* Find out the partiuclar stream is still valid */ if( strncmp(gStreamScopeGlobal, (const ClCharT *)pStreamKey->streamScopeNode.value, pStreamKey->streamScopeNode.length) && CL_FALSE == clLogMasterStreamIsValid(&pStreamKey->streamScopeNode)) { /* * marking this as invalid by assigining CL_IOC_RESERVED_ADDRESS * so that streamMcastAddr will not be allocated & bit will not be set * numActive streams count also will be valid */ pStreamData->streamMcastAddr = CL_IOC_RESERVED_ADDRESS; clLogNotice(CL_LOG_AREA_FILE_OWNER, CL_LOG_CTX_FO_INIT, "Invalidating the stream [%.*s:%.*s]", pStreamKey->streamScopeNode.length, pStreamKey->streamScopeNode.value, pStreamKey->streamName.length, pStreamKey->streamName.value); } if( CL_IOC_RESERVED_ADDRESS != pStreamData->streamMcastAddr ) { bitNum = pStreamData->streamMcastAddr - pMasterEoEntry->startMcastAddr; CL_LOG_DEBUG_TRACE(("bitNUm: %d pStreamData->streamMcastAddr : %lld \n", bitNum, pStreamData->streamMcastAddr)); rc = clBitmapBitSet(pMasterEoEntry->hAllocedAddrMap, bitNum); if( CL_OK != rc ) { CL_LOG_DEBUG_ERROR(("clBitmapBitClear()")); CL_LOG_CLEANUP(clCntNodeDelete(pFileData->hStreamTable, hStreamNode), CL_OK); } pFileData->nActiveStreams++; clLogInfo(CL_LOG_AREA_MASTER, CL_LOG_CTX_CKPT_READ, "Active stream [%.*s:%.*s] has been added", pStreamKey->streamScopeNode.length, pStreamKey->streamScopeNode.value, pStreamKey->streamName.length, pStreamKey->streamName.value); } CL_LOG_DEBUG_TRACE(("Exit")); return CL_OK; }