+static bool CALEAddSenderInfoToList(u_arraylist_t *senderInfoList, CABLESenderInfo_t *senderInfo)
+{
+ oc_mutex_lock(g_senderInfoMutex);
+ senderInfo->refCount++;
+ if (!u_arraylist_add(senderInfoList,(void *)senderInfo))
+ {
+ senderInfo->refCount--;
+ oc_mutex_unlock(g_senderInfoMutex);
+ return false;
+ }
+ oc_mutex_unlock(g_senderInfoMutex);
+ return true;
+}
+
+static void CALERemoveSenderInfoFromList(u_arraylist_t *senderInfoList, CABLESenderInfo_t *senderInfo)
+{
+ oc_mutex_lock(g_senderInfoMutex);
+ uint32_t idx;
+ bool elemFound = u_arraylist_get_index(senderInfoList, (const void*)senderInfo, &idx);
+ if(elemFound)
+ {
+ void *info = u_arraylist_remove(senderInfoList, idx);
+ if (info != NULL)
+ {
+ senderInfo->refCount--;
+ }
+ }
+ oc_mutex_unlock(g_senderInfoMutex);
+}
+
+static CAResult_t CALEFreeSenderInfo(CABLESenderInfo_t *senderInfo)
+{
+ VERIFY_NON_NULL_RET(senderInfo,
+ CALEADAPTER_TAG,
+ "NULL senderInfo to remove argument",
+ CA_STATUS_INVALID_PARAM);
+
+ oc_mutex_lock(g_senderInfoMutex);
+ senderInfo->refCount--;
+ if(senderInfo->refCount <= 0)
+ {
+ OICFree(senderInfo->defragData);
+ OICFree(senderInfo->remoteEndpoint);
+ OICFree(senderInfo);
+ }
+ oc_mutex_unlock(g_senderInfoMutex);
+ return CA_STATUS_OK;
+}
+