Change SendDatagram to not free the message on error. (#16)

The caller should be responsible for freeing the message buffer.
This commit is contained in:
Jonathan Hui
2016-05-11 17:01:38 -07:00
parent 3c6d23d7ba
commit 3a439e56b4
2 changed files with 22 additions and 8 deletions
+21 -3
View File
@@ -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;
}
+1 -5
View File
@@ -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);
}