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