|
|
- From d8cf30cb0abd5fa8f6282b490618204d683b625c Mon Sep 17 00:00:00 2001
- From: Hauke Mehrtens <hauke@hauke-m.de>
- Date: Mon, 3 Oct 2016 21:00:28 +0200
- Subject: [PATCH 1/3] csdk: move OCEntityHandlerResponse from stack to heap
-
- OCEntityHandlerResponse is over 50KByte and I got a stack overflow on MIPS
- running on LEDE without this patch. Instead of storing
- OCEntityHandlerResponse on the program stack, allocate some memory on
- the heap and free it afterwards again.
-
- This fixes one part of this issue for me:
- https://jira.iotivity.org/browse/IOT-1374
-
- Change-Id: I365a5c7a34dce2dfb0897a20b57a13ba566748ec
- Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
- ---
- resource/csdk/stack/src/ocresource.c | 24 +++++++++++++++++-------
- 1 file changed, 17 insertions(+), 7 deletions(-)
-
- --- a/resource/csdk/stack/src/ocresource.c
- +++ b/resource/csdk/stack/src/ocresource.c
- @@ -774,15 +774,25 @@ static bool includeThisResourceInRespons
- OCStackResult SendNonPersistantDiscoveryResponse(OCServerRequest *request, OCResource *resource,
- OCPayload *discoveryPayload, OCEntityHandlerResult ehResult)
- {
- - OCEntityHandlerResponse response = {0};
- + OCEntityHandlerResponse *response = NULL;
- + OCStackResult result = OC_STACK_ERROR;
-
- - response.ehResult = ehResult;
- - response.payload = discoveryPayload;
- - response.persistentBufferFlag = 0;
- - response.requestHandle = (OCRequestHandle) request->requestId;
- - response.resourceHandle = (OCResourceHandle) resource;
- + response = (OCEntityHandlerResponse *)OICCalloc(1, sizeof(*response));
- + VERIFY_PARAM_NON_NULL(TAG, response, "Failed allocating OCEntityHandlerResponse");
-
- - return OCDoResponse(&response);
- + response->ehResult = ehResult;
- + response->payload = discoveryPayload;
- + response->persistentBufferFlag = 0;
- + response->requestHandle = (OCRequestHandle) request->requestId;
- + response->resourceHandle = (OCResourceHandle) resource;
- +
- + result = OCDoResponse(response);
- +
- + OICFree(response);
- + return result;
- +
- +exit:
- + return OC_STACK_NO_MEMORY;
- }
-
- static OCStackResult EHRequest(OCEntityHandlerRequest *ehRequest, OCPayloadType type,
|