You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by ma...@apache.org on 2016/12/14 18:05:34 UTC

[1/2] incubator-mynewt-core git commit: oic; free incoming mbuf right after copying the data to oc_message, as opposed to after calling coap_receive().

Repository: incubator-mynewt-core
Updated Branches:
  refs/heads/develop d8c00637e -> ee6182e13


oic; free incoming mbuf right after copying the data to oc_message,
as opposed to after calling coap_receive().


Project: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/commit/399a7ae3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/399a7ae3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/399a7ae3

Branch: refs/heads/develop
Commit: 399a7ae31a88e13c1b4f6516bb8797849f1f3510
Parents: d8c0063
Author: Marko Kiiskila <ma...@runtime.io>
Authored: Wed Dec 14 10:02:42 2016 -0800
Committer: Marko Kiiskila <ma...@runtime.io>
Committed: Wed Dec 14 10:02:42 2016 -0800

----------------------------------------------------------------------
 net/oic/src/api/oc_buffer.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/399a7ae3/net/oic/src/api/oc_buffer.c
----------------------------------------------------------------------
diff --git a/net/oic/src/api/oc_buffer.c b/net/oic/src/api/oc_buffer.c
index 3e3cf8f..a2a00a8 100644
--- a/net/oic/src/api/oc_buffer.c
+++ b/net/oic/src/api/oc_buffer.c
@@ -81,6 +81,7 @@ void
 oc_message_unref(oc_message_t *message)
 {
     if (message) {
+        assert(message->ref_count > 0);
         message->ref_count--;
         if (message->ref_count == 0) {
             os_memblock_put(&oc_buffers, message);
@@ -171,6 +172,8 @@ oc_buffer_rx(struct os_event *ev)
         }
         memcpy(&msg->endpoint, OC_MBUF_ENDPOINT(m), sizeof(msg->endpoint));
         msg->length = OS_MBUF_PKTHDR(m)->omp_len;
+        os_mbuf_free_chain(m);
+        m = NULL;
 
 #ifdef OC_SECURITY
         b = m->om_data[0];
@@ -179,17 +182,17 @@ oc_buffer_rx(struct os_event *ev)
             oc_process_post(&oc_dtls_handler, oc_events[UDP_TO_DTLS_EVENT], m);
         } else {
             coap_receive(msg);
-            oc_message_unref(msg);
         }
 #else
         coap_receive(msg);
-        oc_message_unref(msg);
 #endif
 free_msg:
-        os_mbuf_free_chain(m);
         if (msg) {
             oc_message_unref(msg);
         }
+        if (m) {
+            os_mbuf_free_chain(m);
+        }
     }
 }
 


[2/2] incubator-mynewt-core git commit: oic; server was making a copy of payload mbuf, instead of directly chaining it to response header.

Posted by ma...@apache.org.
oic; server was making a copy of payload mbuf, instead of
directly chaining it to response header.


Project: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/commit/ee6182e1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/ee6182e1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/ee6182e1

Branch: refs/heads/develop
Commit: ee6182e13f1870f5b43b7af4c817898543719418
Parents: 399a7ae
Author: Marko Kiiskila <ma...@runtime.io>
Authored: Wed Dec 14 10:03:53 2016 -0800
Committer: Marko Kiiskila <ma...@runtime.io>
Committed: Wed Dec 14 10:03:53 2016 -0800

----------------------------------------------------------------------
 net/oic/include/oic/oc_ri.h |  4 +++-
 net/oic/src/api/oc_ri.c     | 17 ++++++++---------
 2 files changed, 11 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ee6182e1/net/oic/include/oic/oc_ri.h
----------------------------------------------------------------------
diff --git a/net/oic/include/oic/oc_ri.h b/net/oic/include/oic/oc_ri.h
index 9449685..e58af0b 100644
--- a/net/oic/include/oic/oc_ri.h
+++ b/net/oic/include/oic/oc_ri.h
@@ -149,7 +149,9 @@ int oc_ri_get_query_value(const char *query, int query_len, const char *key,
 
 oc_interface_mask_t oc_ri_get_interface_mask(char *iface, int if_len);
 
-bool oc_ri_invoke_coap_entity_handler(void *request, void *response,
+typedef struct coap_packet coap_packet_t;
+bool oc_ri_invoke_coap_entity_handler(coap_packet_t *request,
+                                      coap_packet_t *response,
                                       int32_t *offset, oc_endpoint_t *endpoint);
 
 #ifdef __cplusplus

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/ee6182e1/net/oic/src/api/oc_ri.c
----------------------------------------------------------------------
diff --git a/net/oic/src/api/oc_ri.c b/net/oic/src/api/oc_ri.c
index 3ff5040..2f0faea 100644
--- a/net/oic/src/api/oc_ri.c
+++ b/net/oic/src/api/oc_ri.c
@@ -357,8 +357,9 @@ does_interface_support_method(oc_resource_t *resource,
 }
 
 bool
-oc_ri_invoke_coap_entity_handler(void *request, void *response,
-                                 int32_t *offset, oc_endpoint_t *endpoint)
+oc_ri_invoke_coap_entity_handler(coap_packet_t *request,
+                                 coap_packet_t *response, int32_t *offset,
+                                 oc_endpoint_t *endpoint)
 {
   /* Flags that capture status along various stages of processing
    *  the request.
@@ -369,13 +370,10 @@ oc_ri_invoke_coap_entity_handler(void *request, void *response,
   bool authorized = true;
 #endif
 
-  /* Parsed CoAP PDU structure. */
-  coap_packet_t *const packet = (coap_packet_t *)request;
-
   /* This function is a server-side entry point solely for requests.
    *  Hence, "code" contains the CoAP method code.
    */
-  oc_method_t method = packet->code;
+  oc_method_t method = request->code;
 
   /* Initialize request/response objects to be sent up to the app layer. */
   oc_request_t request_obj;
@@ -395,7 +393,7 @@ oc_ri_invoke_coap_entity_handler(void *request, void *response,
   request_obj.query_len = 0;
   request_obj.resource = 0;
   request_obj.origin = endpoint;
-  request_obj.packet = packet;
+  request_obj.packet = request;
 
   /* Initialize OCF interface selector. */
   oc_interface_mask_t interface = 0;
@@ -642,8 +640,9 @@ oc_ri_invoke_coap_entity_handler(void *request, void *response,
     }
 #endif
     if (response_buffer.response_length) {
-        coap_set_payload(response, response_buffer.buffer,
-                         OS_MBUF_PKTLEN(response_buffer.buffer));
+        response->payload_m = response_buffer.buffer;
+        response->payload_len = OS_MBUF_PKTLEN(response_buffer.buffer);
+        response_buffer.buffer = NULL; /* freed in coap_serialize_message() */
         coap_set_header_content_format(response, APPLICATION_CBOR);
     }
     /* response_buffer.code at this point contains a valid CoAP status