Merge tizen_5.0 codes into tizen_4.0
[platform/upstream/iotivity.git] / resource / csdk / stack / src / oickeepalive.c
index 1340b70..7c29f72 100644 (file)
@@ -59,6 +59,9 @@ static const uint64_t USECS_PER_SEC = 1000000;
 #define VERIFY_NON_NULL_V(arg) { if (!arg) {OIC_LOG_V(FATAL, TAG, "%s is NULL", #arg);\
     goto exit;} }
 
+#define VERIFY_NON_NULL_EXIT(arg, logLevel, retVal) { if (!(arg)) { OIC_LOG((logLevel), \
+             TAG, #arg " is NULL"); ret = retVal; goto exit; } }
+
 /**
  * The KeepAlive table entries are removed
  * if it can't receive response message within 60 seconds.
@@ -276,10 +279,11 @@ OCStackResult OCFindKeepAliveResource(OCDoHandle *handle, const char *remoteAddr
 OCStackResult OCSendKeepAliveRequest(OCDoHandle *handle, const char *remoteAddr,
                                      OCPayload *payload, OCCallbackData *cbData)
 {
-    VERIFY_NON_NULL(remoteAddr, FATAL, OC_STACK_INVALID_PARAM);
-    VERIFY_NON_NULL(cbData, FATAL, OC_STACK_INVALID_PARAM);
-    VERIFY_NON_NULL(cbData->cb, FATAL, OC_STACK_INVALID_CALLBACK);
-    VERIFY_NON_NULL(payload, FATAL, OC_STACK_INVALID_CALLBACK);
+    OCStackResult ret;
+    VERIFY_NON_NULL_EXIT(remoteAddr, FATAL, OC_STACK_INVALID_PARAM);
+    VERIFY_NON_NULL_EXIT(cbData, FATAL, OC_STACK_INVALID_PARAM);
+    VERIFY_NON_NULL_EXIT(cbData->cb, FATAL, OC_STACK_INVALID_CALLBACK);
+    VERIFY_NON_NULL_EXIT(payload, FATAL, OC_STACK_INVALID_CALLBACK);
 
     OIC_LOG(DEBUG, TAG, "SendKeepAliveRequest IN");
 
@@ -292,15 +296,17 @@ OCStackResult OCSendKeepAliveRequest(OCDoHandle *handle, const char *remoteAddr,
     if (result != OC_STACK_OK)
     {
         OIC_LOG_V(DEBUG, TAG, "Unable to parse uri: %s", remoteAddr);
+        OCPayloadDestroy(payload);
         return OC_STACK_ERROR;
     }
 
-    VERIFY_NON_NULL(devAddr, FATAL, OC_STACK_INVALID_PARAM);
+    VERIFY_NON_NULL_EXIT(devAddr, FATAL, OC_STACK_INVALID_PARAM);
 
     if (!(devAddr->adapter & OC_ADAPTER_TCP))
     {
         OIC_LOG_V(DEBUG, TAG, "Not supported connectivity type");
         OICFree(devAddr);
+        OCPayloadDestroy(payload);
         return OC_STACK_ERROR;
     }
 
@@ -320,6 +326,7 @@ OCStackResult OCSendKeepAliveRequest(OCDoHandle *handle, const char *remoteAddr,
             oc_mutex_unlock(g_mutexObjectList);
             OIC_LOG(ERROR, TAG, "Failed to add new KeepAlive entry");
             OICFree(devAddr);
+            OCPayloadDestroy(payload);
             return OC_STACK_ERROR;
         }
     }
@@ -334,6 +341,7 @@ OCStackResult OCSendKeepAliveRequest(OCDoHandle *handle, const char *remoteAddr,
             oc_mutex_unlock(g_mutexObjectList);
             OIC_LOG(ERROR, TAG, "Already sent a ping request to remote device");
             OICFree(devAddr);
+            OCPayloadDestroy(payload);
             return OC_STACK_ERROR;
         }
         entry->interval = interval;
@@ -381,6 +389,10 @@ OCStackResult OCSendKeepAliveRequest(OCDoHandle *handle, const char *remoteAddr,
     OIC_LOG(DEBUG, TAG, "SendKeepAliveRequest OUT");
     OICFree(devAddr);
     return result;
+
+exit:
+    OCPayloadDestroy(payload);
+    return (ret);
 }
 
 OCStackResult OCHandleKeepAliveResponse(const CAEndpoint_t *endPoint, const OCPayload *payload)