From ea8f6425904a1ac7fdbe0e7fa38797d335d59eb6 Mon Sep 17 00:00:00 2001 From: "hyuna0213.jo" Date: Mon, 14 Sep 2015 18:32:49 +0900 Subject: [PATCH] optimization to use the existing buffer in blockwise-transfer. if we have to update payload data, we always allocate new memory. so we modified the code to use the existing memory if one exists. This patch addresses the first part of IOT-690. Change-Id: I04ca551273caf02f783c62a76f11f7e07409d8dd Signed-off-by: hyuna0213.jo Reviewed-on: https://gerrit.iotivity.org/gerrit/2503 Tested-by: jenkins-iotivity Reviewed-by: Patrick Lankswert --- .../csdk/connectivity/src/cablockwisetransfer.c | 49 ++++++++++------------ 1 file changed, 22 insertions(+), 27 deletions(-) diff --git a/resource/csdk/connectivity/src/cablockwisetransfer.c b/resource/csdk/connectivity/src/cablockwisetransfer.c index f0b8af3..6b3633b 100644 --- a/resource/csdk/connectivity/src/cablockwisetransfer.c +++ b/resource/csdk/connectivity/src/cablockwisetransfer.c @@ -2054,44 +2054,39 @@ CAResult_t CAUpdatePayloadToCAData(CAData_t *data, const CAPayload_t payload, VERIFY_NON_NULL(data, TAG, "data is NULL"); VERIFY_NON_NULL(payload, TAG, "payload is NULL"); - if (data->requestInfo) + CAPayload_t newPayload = NULL; + switch (data->dataType) { - // allocate payload field - if (data->requestInfo->info.payload) - { - char *temp = (char *) OICCalloc(payloadLen, sizeof(char)); - if (!temp) + case CA_REQUEST_DATA: + // allocate payload field + newPayload = OICRealloc(data->requestInfo->info.payload, payloadLen); + if (!newPayload) { OIC_LOG(ERROR, TAG, "out of memory"); return CA_STATUS_FAILED; } - memcpy(temp, payload, payloadLen); - - // save the full payload - OICFree(data->requestInfo->info.payload); - data->requestInfo->info.payload = (CAPayload_t) temp; - } - data->requestInfo->info.payloadSize = payloadLen; - } + data->requestInfo->info.payload = newPayload; + memcpy(data->requestInfo->info.payload, payload, payloadLen); + data->requestInfo->info.payloadSize = payloadLen; + break; - if (data->responseInfo) - { - // allocate payload field - if (data->responseInfo->info.payload) - { - char *temp = (char *) OICCalloc(payloadLen, sizeof(char)); - if (!temp) + case CA_RESPONSE_DATA: + // allocate payload field + newPayload = OICRealloc(data->responseInfo->info.payload, payloadLen); + if (!newPayload) { OIC_LOG(ERROR, TAG, "out of memory"); return CA_STATUS_FAILED; } - memcpy(temp, payload, payloadLen); + data->responseInfo->info.payload = newPayload; + memcpy(data->responseInfo->info.payload, payload, payloadLen); + data->responseInfo->info.payloadSize = payloadLen; + break; - // save the full payload - OICFree(data->responseInfo->info.payload); - data->responseInfo->info.payload = (CAPayload_t) temp; - } - data->responseInfo->info.payloadSize = payloadLen; + default: + // does not occur case + OIC_LOG(ERROR, TAG, "not supported data type"); + return CA_NOT_SUPPORTED; } OIC_LOG(DEBUG, TAG, "OUT-UpdatePayload"); -- 2.7.4