From 2f3cfe1c4c684a552ab388598043f8d623256e9c Mon Sep 17 00:00:00 2001 From: Jonathan Hui Date: Thu, 3 Aug 2017 10:19:50 -0700 Subject: [PATCH] [commissioning] improve handling of OT_ERROR_NO_BUFS (#2054) This commit makes the following changes: 1. Check return value of SetLength() when forming a RLY_TX.ntf message. 2. When accepting data to transmit from mbedtls, only free the message buffer if the message buffer is empty. Otherwise, attempt to transmit the message buffer that was already formed. 3. When freeing the transmit message buffer for mbedtls, set the transmit message buffer pointer to NULL. --- src/core/coap/coap_secure.cpp | 7 ++++--- src/core/meshcop/commissioner.cpp | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/core/coap/coap_secure.cpp b/src/core/coap/coap_secure.cpp index 0bd90b9e9..25f5117a8 100644 --- a/src/core/coap/coap_secure.cpp +++ b/src/core/coap/coap_secure.cpp @@ -252,21 +252,22 @@ otError CoapSecure::HandleDtlsSend(const uint8_t *aBuf, uint16_t aLength, uint8_ mTransmitMessage->SetLinkSecurityEnabled(false); } + SuccessOrExit(error = mTransmitMessage->Append(aBuf, aLength)); + // Set message sub type in case Joiner Finalize Response is appended to the message. if (aMessageSubType != Message::kSubTypeNone) { mTransmitMessage->SetSubType(aMessageSubType); } - VerifyOrExit(mTransmitMessage->Append(aBuf, aLength) == OT_ERROR_NONE, error = OT_ERROR_NO_BUFS); - mTransmitTask.Post(); exit: - if (error != OT_ERROR_NONE && mTransmitMessage != NULL) + if (error != OT_ERROR_NONE && mTransmitMessage != NULL && mTransmitMessage->GetLength() == 0) { mTransmitMessage->Free(); + mTransmitMessage = NULL; } otLogFuncExitErr(error); diff --git a/src/core/meshcop/commissioner.cpp b/src/core/meshcop/commissioner.cpp index 06c6ba4c4..0ff73d4e2 100644 --- a/src/core/meshcop/commissioner.cpp +++ b/src/core/meshcop/commissioner.cpp @@ -1025,7 +1025,7 @@ otError Commissioner::SendRelayTransmit(Message &aMessage, const Ip6::MessageInf tlv.SetLength(aMessage.GetLength()); SuccessOrExit(error = message->Append(&tlv, sizeof(tlv))); offset = message->GetLength(); - message->SetLength(offset + aMessage.GetLength()); + SuccessOrExit(error = message->SetLength(offset + aMessage.GetLength())); aMessage.CopyTo(0, offset, aMessage.GetLength(), *message); messageInfo.SetPeerAddr(netif.GetMle().GetMeshLocal16());