From 3a439e56b47eca6bf4e115e494d8ab383875f71b Mon Sep 17 00:00:00 2001 From: Jonathan Hui Date: Wed, 11 May 2016 17:01:38 -0700 Subject: [PATCH] Change SendDatagram to not free the message on error. (#16) The caller should be responsible for freeing the message buffer. --- src/core/net/icmp6.cpp | 24 +++++++++++++++++++++--- src/core/net/ip6.cpp | 6 +----- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/core/net/icmp6.cpp b/src/core/net/icmp6.cpp index 3aa46c0ef..fe9d33fac 100644 --- a/src/core/net/icmp6.cpp +++ b/src/core/net/icmp6.cpp @@ -63,7 +63,7 @@ ThreadError IcmpEcho::SendEchoRequest(const SockAddr &aDestination, { ThreadError error = kThreadError_None; MessageInfo messageInfo; - Message *message; + Message *message = NULL; IcmpHeader icmp6Header; VerifyOrExit((message = Ip6::NewMessage(0)) != NULL, error = kThreadError_NoBufs); @@ -85,6 +85,12 @@ ThreadError IcmpEcho::SendEchoRequest(const SockAddr &aDestination, otLogInfoIcmp("Sent echo request\n"); exit: + + if (error != kThreadError_None && message != NULL) + { + Message::Free(*message); + } + return error; } @@ -112,7 +118,7 @@ ThreadError Icmp::SendError(const Address &aDestination, IcmpHeader::Type aType, { ThreadError error = kThreadError_None; MessageInfo messageInfo; - Message *message; + Message *message = NULL; IcmpHeader icmp6Header; VerifyOrExit((message = Ip6::NewMessage(0)) != NULL, error = kThreadError_NoBufs); @@ -133,6 +139,12 @@ ThreadError Icmp::SendError(const Address &aDestination, IcmpHeader::Type aType, otLogInfoIcmp("Sent ICMPv6 Error\n"); exit: + + if (error != kThreadError_None && message != NULL) + { + Message::Free(*message); + } + return error; } @@ -188,7 +200,7 @@ ThreadError Icmp::HandleEchoRequest(Message &aRequestMessage, const MessageInfo { ThreadError error = kThreadError_None; IcmpHeader icmp6Header; - Message *replyMessage; + Message *replyMessage = NULL; MessageInfo replyMessageInfo; uint16_t payloadLength; @@ -221,6 +233,12 @@ ThreadError Icmp::HandleEchoRequest(Message &aRequestMessage, const MessageInfo otLogInfoIcmp("Sent Echo Reply\n"); exit: + + if (error != kThreadError_None && replyMessage != NULL) + { + Message::Free(*replyMessage); + } + return error; } diff --git a/src/core/net/ip6.cpp b/src/core/net/ip6.cpp index 79277bda1..f40f0cc1c 100644 --- a/src/core/net/ip6.cpp +++ b/src/core/net/ip6.cpp @@ -172,11 +172,7 @@ ThreadError Ip6::SendDatagram(Message &message, MessageInfo &messageInfo, IpProt exit: - if (error != kThreadError_None) - { - Message::Free(message); - } - else + if (error == kThreadError_None) { error = HandleDatagram(message, NULL, messageInfo.mInterfaceId, NULL, false); }