[IOT-2202] Optimize memory allocation logic
authorAbhishek Sharma <ce.abhishek@samsung.com>
Tue, 16 May 2017 10:44:16 +0000 (16:14 +0530)
committerAshok Babu Channa <ashok.channa@samsung.com>
Wed, 17 May 2017 13:11:15 +0000 (13:11 +0000)
Change-Id: I936752834dfd4c8f80525a773a2a92607a147702
Signed-off-by: Abhishek Sharma <ce.abhishek@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/19947
Tested-by: jenkins-iotivity <jenkins@iotivity.org>
Reviewed-by: Phil Coval <philippe.coval@osg.samsung.com>
Reviewed-by: Ashok Babu Channa <ashok.channa@samsung.com>
resource/csdk/routing/include/routingtablemanager.h
resource/csdk/routing/src/routingmanager.c
resource/csdk/routing/src/routingtablemanager.c

index 6c6435e..a27225c 100644 (file)
@@ -287,7 +287,7 @@ void RTMFreeGateway(RTMGatewayId_t *gateway, u_linklist_t **gatewayTable);
  * @param[in,out]    obsListLen             Length if Observation ID list.
  * @param[in]        gatewayTable           Gateway Routing Table.
  */
-void RTMGetObserverList(OCObservationId **obsList, uint8_t *obsListLen,
+void RTMGetObserverList(OCObservationId **obsList, uint32_t *obsListLen,
                         const u_linklist_t *gatewayTable);
 
 /**
index d7da3c0..bf16189 100644 (file)
@@ -707,7 +707,7 @@ OCStackResult RMSendNotificationToAll(const OCRepPayload *payload)
     RM_NULL_CHECK_WITH_RET(payload, TAG, "payload");
 
     OCObservationId *obsList = NULL;
-    uint8_t obsLen = 0;
+    uint32_t obsLen = 0;
     // Get the complete observer list.
     RTMGetObserverList(&obsList, &obsLen, g_routingGatewayTable);
     OCStackResult result = OC_STACK_OK;
index f99770d..86d119a 100644 (file)
  */
 #define RM_TAG "OIC_RM_RAP"
 
-
-/**
- * Initial Length of observer list.
- */
-#define MAX_OBSERVER_LIST_LENGTH 10
-
 static const uint64_t USECS_PER_SEC = 1000000;
 
 OCStackResult RTMInitialize(u_linklist_t **gatewayTable, u_linklist_t **endpointTable)
@@ -935,23 +929,25 @@ CAEndpoint_t *RTMGetEndpointEntry(uint16_t endpointId, const u_linklist_t *endpo
     return NULL;
 }
 
-void RTMGetObserverList(OCObservationId **obsList, uint8_t *obsListLen,
+void RTMGetObserverList(OCObservationId **obsList, uint32_t *obsListLen,
                         const u_linklist_t *gatewayTable)
 {
     OIC_LOG(DEBUG, TAG, "IN");
     RM_NULL_CHECK_VOID(gatewayTable, TAG, "gatewayTable");
     RM_NULL_CHECK_VOID(obsList, TAG, "obsList");
 
-    *obsList = (OCObservationId *) OICCalloc(MAX_OBSERVER_LIST_LENGTH, sizeof(OCObservationId));
+    *obsList = (OCObservationId *) OICCalloc(u_linklist_length(gatewayTable),
+                                             sizeof(OCObservationId));
     if (!(*obsList))
     {
         OIC_LOG(ERROR, TAG, "out of memory");
+        *obsListLen = 0;
         return;
     }
 
     u_linklist_iterator_t *iterTable = NULL;
     u_linklist_init_iterator(gatewayTable, &iterTable);
-    uint8_t len = 0;
+    uint32_t len = 0;
     while (NULL != iterTable)
     {
         RTMGatewayEntry_t *entry = u_linklist_get_data(iterTable);
@@ -969,11 +965,6 @@ void RTMGetObserverList(OCObservationId **obsList, uint8_t *obsListLen,
                 *(*obsList + len) = destCheck->observerId;
                 len++;
             }
-            if (MAX_OBSERVER_LIST_LENGTH < len)
-            {
-                *obsList = (OCObservationId *) OICRealloc((void *)*obsList,
-                           (sizeof(OCObservationId) * (len + 1)));
-            }
         }
         u_linklist_get_next(&iterTable);
     }