diff options
author | samanway-dey <samanway.dey@samsung.com> | 2018-11-27 22:05:00 +0530 |
---|---|---|
committer | DoHyun Pyun <dh79.pyun@samsung.com> | 2018-12-05 15:50:24 +0900 |
commit | 8b45f88a6605085dcda84b44df7b26a94a7d893c (patch) | |
tree | 412c0286a8ee1a0f9456e4130ec996038264531c /resource/csdk/stack | |
parent | 89c8f508c9083e24739094a18566c26e436aa22f (diff) | |
download | iotivity-8b45f88a6605085dcda84b44df7b26a94a7d893c.tar.gz iotivity-8b45f88a6605085dcda84b44df7b26a94a7d893c.tar.bz2 iotivity-8b45f88a6605085dcda84b44df7b26a94a7d893c.zip |
freed payload in OCSendKeepAliveRequest
https://github.sec.samsung.net/RS7-IOTIVITY/IoTivity/pull/346
(cherry picked from commit 80cddcb478a802a2d7b6705eeb0624caca15d660)
Change-Id: Id86c7fce30d9f5a2fa137ac6ca8be89005ab3c29
Signed-off-by: DoHyun Pyun <dh79.pyun@samsung.com>
Diffstat (limited to 'resource/csdk/stack')
-rw-r--r-- | resource/csdk/stack/include/oickeepalive.h | 3 | ||||
-rw-r--r-- | resource/csdk/stack/src/oickeepalive.c | 22 |
2 files changed, 19 insertions, 6 deletions
diff --git a/resource/csdk/stack/include/oickeepalive.h b/resource/csdk/stack/include/oickeepalive.h index d813665d8..9aeeeacb7 100644 --- a/resource/csdk/stack/include/oickeepalive.h +++ b/resource/csdk/stack/include/oickeepalive.h @@ -65,7 +65,8 @@ OCStackResult OCFindKeepAliveResource(OCDoHandle *handle, const char *remoteAddr * the consumer. A NULL handle is permitted in the event where the caller * has no use for the return value. * @param remoteAddr The target device address to discovery a resource. - * @param payload Encoded request payload. + * @param payload Encoded request payload.This API takes ownership of payload passed as input, + * so whenever it returns, payload memory is de-allocated. * @param cbData Asynchronous callback function that is invoked by the stack when * discovery or resource interaction is received. The discovery could be * related to filtered/scoped/particular resource. The callback is diff --git a/resource/csdk/stack/src/oickeepalive.c b/resource/csdk/stack/src/oickeepalive.c index 1340b705d..7c29f72d0 100644 --- a/resource/csdk/stack/src/oickeepalive.c +++ b/resource/csdk/stack/src/oickeepalive.c @@ -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) |