diff --git a/source/cosa/package/system/components/SysRepositoryFolder/sys_rfo_sorting.c b/source/cosa/package/system/components/SysRepositoryFolder/sys_rfo_sorting.c index 65a0298b..107955c9 100644 --- a/source/cosa/package/system/components/SysRepositoryFolder/sys_rfo_sorting.c +++ b/source/cosa/package/system/components/SysRepositoryFolder/sys_rfo_sorting.c @@ -139,12 +139,15 @@ SysRfoSortFolderByTime pMyObject->FolderSortingType = SYS_RFO_SORTING_TYPE_BYTIME; } + AnscAcquireLock(&pMyObject->FolderTableLock); if ( !pMyObject->FolderArray || (pMyObject->FolderArrayCurLen == 0) ) { + AnscReleaseLock(&pMyObject->FolderTableLock); return ANSC_STATUS_SUCCESS; } else { + AnscReleaseLock(&pMyObject->FolderTableLock); pTmpFolderArray = (ANSC_HANDLE*)AnscAllocateMemory(sizeof(ANSC_HANDLE) * pMyObject->FolderArrayMaxLen); if ( !pTmpFolderArray ) @@ -250,12 +253,15 @@ SysRfoSortFolderByName pMyObject->FolderSortingType = SYS_RFO_SORTING_TYPE_BYNAME; } + AnscAcquireLock(&pMyObject->FolderTableLock); if ( !pMyObject->FolderArray || (pMyObject->FolderArrayCurLen == 0) ) { + AnscReleaseLock(&pMyObject->FolderTableLock); return ANSC_STATUS_SUCCESS; } else { + AnscReleaseLock(&pMyObject->FolderTableLock); pTmpFolderArray = (ANSC_HANDLE*)AnscAllocateMemory(sizeof(ANSC_HANDLE) * pMyObject->FolderArrayMaxLen); if ( !pTmpFolderArray ) @@ -365,12 +371,15 @@ SysRfoSortRecordByTime pMyObject->RecordSortingType = SYS_RFO_SORTING_TYPE_BYTIME; } + AnscAcquireLock(&pMyObject->RecordTableLock); if ( !pMyObject->RecordArray || (pMyObject->RecordArrayCurLen == 0) ) { + AnscReleaseLock(&pMyObject->RecordTableLock); return ANSC_STATUS_SUCCESS; } else { + AnscReleaseLock(&pMyObject->RecordTableLock); pTmpRecordArray = (ANSC_HANDLE*)AnscAllocateMemory(sizeof(ANSC_HANDLE) * pMyObject->RecordArrayMaxLen); if ( !pTmpRecordArray ) @@ -380,7 +389,6 @@ SysRfoSortRecordByTime } AnscAcquireLock(&pMyObject->RecordTableLock); - for ( k = 0; k < pMyObject->RecordArrayCurLen; k++ ) { pTbsRecord = (PSYS_REPOSITORY_RECORD_OBJECT)pMyObject->RecordArray[k]; @@ -476,12 +484,15 @@ SysRfoSortRecordByName pMyObject->RecordSortingType = SYS_RFO_SORTING_TYPE_BYNAME; } + AnscAcquireLock(&pMyObject->RecordTableLock); if ( !pMyObject->RecordArray || (pMyObject->RecordArrayCurLen == 0) ) { + AnscReleaseLock(&pMyObject->RecordTableLock); return ANSC_STATUS_SUCCESS; } else { + AnscReleaseLock(&pMyObject->RecordTableLock); pTmpRecordArray = (ANSC_HANDLE*)AnscAllocateMemory(sizeof(ANSC_HANDLE) * pMyObject->RecordArrayMaxLen); if ( !pTmpRecordArray ) diff --git a/source/debug_api/ansc_memory.c b/source/debug_api/ansc_memory.c index e22b33b5..71863073 100644 --- a/source/debug_api/ansc_memory.c +++ b/source/debug_api/ansc_memory.c @@ -332,14 +332,14 @@ AnscAllocateMemoryCountSize { void* pMemoryPointer = NULL; + AnscInitializeSpinLock(&g_tCountSizeSpinLock); + AnscAcquireSpinLock(&g_tCountSizeSpinLock); if ( !g_bCountSizeInitialized ) { - AnscInitializeSpinLock(&g_tCountSizeSpinLock); - AnscAcquireSpinLock(&g_tCountSizeSpinLock); g_bCountSizeInitialized = TRUE; - AnscReleaseSpinLock(&g_tCountSizeSpinLock); } + AnscReleaseSpinLock(&g_tCountSizeSpinLock); pMemoryPointer = AnscAllocateMemoryOrig(ulMemorySize + sizeof(ULONG)); @@ -1022,23 +1022,23 @@ AnscAllocateMemoryRecordDetail " AnscAllocateMemoryRecordDetail 1 \n" ));*/ + AnscInitializeSpinLock(&g_tCountSizeSpinLock); + + AnscAcquireSpinLock(&g_tCountSizeSpinLock); if ( !g_bCountSizeInitialized ) { - AnscInitializeSpinLock(&g_tCountSizeSpinLock); - - AnscAcquireSpinLock(&g_tCountSizeSpinLock); g_bCountSizeInitialized = TRUE; - AnscReleaseSpinLock(&g_tCountSizeSpinLock); } + AnscReleaseSpinLock(&g_tCountSizeSpinLock); + AnscInitializeSpinLock(&g_tRecordDetailSpinLock); + AnscInitializeMemoryAllocTable(); + + AnscAcquireSpinLock(&g_tRecordDetailSpinLock); if ( !g_bRecordDetailInitialized ) { - AnscInitializeSpinLock(&g_tRecordDetailSpinLock); - AnscInitializeMemoryAllocTable(); - - AnscAcquireSpinLock(&g_tRecordDetailSpinLock); g_bRecordDetailInitialized = TRUE; - AnscReleaseSpinLock(&g_tRecordDetailSpinLock); } + AnscReleaseSpinLock(&g_tRecordDetailSpinLock); /*CcspTraceError (( " AnscAllocateMemoryRecordDetail 2 \n" diff --git a/source/util_api/ansc/AnscBrokerEngineTcp/ansc_beto_management.c b/source/util_api/ansc/AnscBrokerEngineTcp/ansc_beto_management.c index 4446c49a..0f275bdd 100644 --- a/source/util_api/ansc/AnscBrokerEngineTcp/ansc_beto_management.c +++ b/source/util_api/ansc/AnscBrokerEngineTcp/ansc_beto_management.c @@ -296,10 +296,13 @@ AnscBetoAddSocket /*AnscTrace("AnscBetoAddSocket!\n dstinationaddress %X dst_port %X src_port %X",*(PULONG)dst_addr,dst_port,src_port);*/ + AnscAcquireLock (&pMyObject->SocketTableLock); if ( pMyObject->CurSocketCount >= pMyObject->MaxSocketCount ) { + AnscReleaseLock (&pMyObject->SocketTableLock); return (ANSC_HANDLE)NULL; } + AnscReleaseLock (&pMyObject->SocketTableLock); pSocket = (PANSC_BROKER_SOCKET_TCP_OBJECT)pMyObject->GetSocketByAddr diff --git a/source/util_api/ansc/AnscPlatform/ansc_http_parser.c b/source/util_api/ansc/AnscPlatform/ansc_http_parser.c index 451c081e..73523bb1 100644 --- a/source/util_api/ansc/AnscPlatform/ansc_http_parser.c +++ b/source/util_api/ansc/AnscPlatform/ansc_http_parser.c @@ -8101,6 +8101,10 @@ HttpSmpoParseCookie { ulCount --; } + else + { + return (ANSC_HANDLE)pHfoCookie; + } pHfoCookie = (PHTTP_HFO_COOKIE)AnscAllocateMemory diff --git a/source/util_api/ansc/AnscPlatform/ansc_packet.c b/source/util_api/ansc/AnscPlatform/ansc_packet.c index 239e96ab..864d0819 100644 --- a/source/util_api/ansc/AnscPlatform/ansc_packet.c +++ b/source/util_api/ansc/AnscPlatform/ansc_packet.c @@ -322,8 +322,10 @@ AnscReleasePdoTrace * race condition may occur for the queue size, but it can only make the * pool a little bit over-limit and should not matter. */ + AnscAcquireSpinLock(&g_qPdoPoolSpinLock); if ( AnscSListQueryDepth(&g_qPdoPoolList) >= g_ulMaxPdoPoolSize ) { + AnscReleaseSpinLock(&g_qPdoPoolSpinLock); #ifdef _ANSC_TRACE_PACKET_ AnscTraceWarning(("@@ AnscPacket: Pdo pool over limit %d !!! -- Size limit %d.\n", g_ulFreePdo ++, g_ulMaxPdoPoolSize)); @@ -332,6 +334,7 @@ AnscReleasePdoTrace } else { + AnscReleaseSpinLock(&g_qPdoPoolSpinLock); #ifndef _ANSC_TRACE_PACKET_ AnscPdoClean((ANSC_HANDLE)pPdo); #else @@ -1742,8 +1745,10 @@ AnscReleaseBdo * race condition may occur for the queue size, but it can only make the * pool a little bit over-limit and should not matter. */ + AnscAcquireSpinLock(&g_qBdoPoolSpinLock); if ( AnscSListQueryDepth(&g_qBdoPoolList) >= g_ulMaxBdoPoolSize ) { + AnscReleaseSpinLock(&g_qBdoPoolSpinLock); #ifdef _ANSC_TRACE_PACKET_ AnscTraceWarning(("@@ AnscPacket: Bdo Pool over limit %d !!! -- Size limit %d.\n", ++g_ulFreeBdo, g_ulMaxBdoPoolSize)); @@ -1753,8 +1758,6 @@ AnscReleaseBdo else { AnscBdoClean((ANSC_HANDLE)pBdo); - - AnscAcquireSpinLock(&g_qBdoPoolSpinLock); AnscSListPushEntry(&g_qBdoPoolList, &pBdo->Linkage); AnscReleaseSpinLock(&g_qBdoPoolSpinLock); } @@ -2167,19 +2170,22 @@ AnscFreeSonBdo * race condition may occur for the queue size, but it can only make the * pool a little bit over-limit and should not matter. */ + AnscAcquireSpinLock(&g_qBdoPoolSpinLock); if ( AnscSListQueryDepth(&g_qBdoPoolList) >= g_ulMaxBdoPoolSize ) { #ifdef _ANSC_TRACE_PACKET_ AnscTraceWarning(("@@ AnscPacket: Bdo pool over limit %d !!! -- Size limt %d.\n", ++g_ulFreeBdo, g_ulMaxBdoPoolSize)); #endif + AnscReleaseSpinLock(&g_qBdoPoolSpinLock); AnscFreeMemory(pSonBdo); } else { AnscBdoClean((ANSC_HANDLE)pSonBdo); - AnscAcquireSpinLock(&g_qBdoPoolSpinLock); + /* Hold the lock from size check through push operation */ + /* The lock is already held from line 2176 */ AnscSListPushEntry(&g_qBdoPoolList, &pSonBdo->Linkage); AnscReleaseSpinLock(&g_qBdoPoolSpinLock); } diff --git a/source/util_api/ansc/AnscPlatform/ansc_protection.c b/source/util_api/ansc/AnscPlatform/ansc_protection.c index a1090c02..4012163d 100644 --- a/source/util_api/ansc/AnscPlatform/ansc_protection.c +++ b/source/util_api/ansc/AnscPlatform/ansc_protection.c @@ -533,12 +533,13 @@ AnscResetSimEvent return; } + AnscAcquireSpinLock(&sim_event->StateSpinLock); if ( !sim_event->bSignalled ) { + AnscReleaseSpinLock(&sim_event->StateSpinLock); return; } - AnscAcquireSpinLock(&sim_event->StateSpinLock); sim_event->bSignalled = FALSE; AnscReleaseSpinLock(&sim_event->StateSpinLock); diff --git a/source/util_api/slap/components/SlapObjEntity/slap_oeo_management.c b/source/util_api/slap/components/SlapObjEntity/slap_oeo_management.c index 81f594b3..0fd87bb9 100644 --- a/source/util_api/slap/components/SlapObjEntity/slap_oeo_management.c +++ b/source/util_api/slap/components/SlapObjEntity/slap_oeo_management.c @@ -1314,14 +1314,14 @@ SlapOeoRelPooledObjRecord PSLAP_BSS_INTERFACE pSlapBssIf = (PSLAP_BSS_INTERFACE )pMyObject->hSlapBssIf; PSLAP_OBJ_RECORD_OBJECT pSlapObjRecord = (PSLAP_OBJ_RECORD_OBJECT)hObjRecord; + AnscAcquireLock (&pMyObject->PooledOroSListLock); if ( AnscSListQueryDepth(&pMyObject->PooledOroSList) >= pSlapBssIf->GetDefPoolSize(pSlapBssIf->hOwnerContext) ) { pSlapObjRecord->Remove((ANSC_HANDLE)pSlapObjRecord); - + AnscReleaseLock (&pMyObject->PooledOroSListLock); return ANSC_STATUS_SUCCESS; } - AnscAcquireLock (&pMyObject->PooledOroSListLock); AnscSListPushEntry(&pMyObject->PooledOroSList, &pSlapObjRecord->Linkage); AnscReleaseLock (&pMyObject->PooledOroSListLock);