lede-packages-rs

git clone git://archive.git.mtrnord.blog/MTRNord/lede-packages-rs.git
Log | Files | Refs | README | LICENSE

050-csdk-move-OCEntityHandlerResponse-from-stack-to-heap.patch (2173B)


      1 From d8cf30cb0abd5fa8f6282b490618204d683b625c Mon Sep 17 00:00:00 2001
      2 From: Hauke Mehrtens <hauke@hauke-m.de>
      3 Date: Mon, 3 Oct 2016 21:00:28 +0200
      4 Subject: [PATCH 1/3] csdk: move OCEntityHandlerResponse from stack to heap
      5 
      6 OCEntityHandlerResponse is over 50KByte and I got a stack overflow on MIPS
      7 running on LEDE without this patch. Instead of storing
      8 OCEntityHandlerResponse on the program stack, allocate some memory on
      9 the heap and free it afterwards again.
     10 
     11 This fixes one part of this issue for me:
     12 https://jira.iotivity.org/browse/IOT-1374
     13 
     14 Change-Id: I365a5c7a34dce2dfb0897a20b57a13ba566748ec
     15 Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
     16 ---
     17  resource/csdk/stack/src/ocresource.c | 24 +++++++++++++++++-------
     18  1 file changed, 17 insertions(+), 7 deletions(-)
     19 
     20 --- a/resource/csdk/stack/src/ocresource.c
     21 +++ b/resource/csdk/stack/src/ocresource.c
     22 @@ -774,15 +774,25 @@ static bool includeThisResourceInRespons
     23  OCStackResult SendNonPersistantDiscoveryResponse(OCServerRequest *request, OCResource *resource,
     24                                  OCPayload *discoveryPayload, OCEntityHandlerResult ehResult)
     25  {
     26 -    OCEntityHandlerResponse response = {0};
     27 +    OCEntityHandlerResponse *response = NULL;
     28 +    OCStackResult result = OC_STACK_ERROR;
     29  
     30 -    response.ehResult = ehResult;
     31 -    response.payload = discoveryPayload;
     32 -    response.persistentBufferFlag = 0;
     33 -    response.requestHandle = (OCRequestHandle) request->requestId;
     34 -    response.resourceHandle = (OCResourceHandle) resource;
     35 +    response = (OCEntityHandlerResponse *)OICCalloc(1, sizeof(*response));
     36 +    VERIFY_PARAM_NON_NULL(TAG, response, "Failed allocating OCEntityHandlerResponse");
     37  
     38 -    return OCDoResponse(&response);
     39 +    response->ehResult = ehResult;
     40 +    response->payload = discoveryPayload;
     41 +    response->persistentBufferFlag = 0;
     42 +    response->requestHandle = (OCRequestHandle) request->requestId;
     43 +    response->resourceHandle = (OCResourceHandle) resource;
     44 +
     45 +    result = OCDoResponse(response);
     46 +
     47 +    OICFree(response);
     48 +    return result;
     49 +
     50 +exit:
     51 +    return OC_STACK_NO_MEMORY;
     52  }
     53  
     54  static OCStackResult EHRequest(OCEntityHandlerRequest *ehRequest, OCPayloadType type,