Use a send task for handling IPv6::SendMessage requests to reduce stack. (#536)

This commit is contained in:
Jonathan Hui
2016-09-08 08:48:06 -07:00
committed by GitHub
parent bcc1261749
commit 4f610ef082
4 changed files with 52 additions and 1 deletions
+19 -1
View File
@@ -53,6 +53,7 @@ Ip6::Ip6(void):
mUdp(*this),
mMpl(*this),
mForwardingEnabled(false),
mSendQueueTask(mTaskletScheduler, HandleSendQueue, this),
mReceiveIp6DatagramCallback(NULL),
mReceiveIp6DatagramCallbackContext(NULL),
mIsReceiveIp6FilterEnabled(false),
@@ -198,12 +199,29 @@ exit:
if (error == kThreadError_None)
{
HandleDatagram(message, NULL, messageInfo.mInterfaceId, NULL, false);
message.SetInterfaceId(messageInfo.mInterfaceId);
mSendQueue.Enqueue(message);
mSendQueueTask.Post();
}
return error;
}
void Ip6::HandleSendQueue(void *aContext)
{
static_cast<Ip6 *>(aContext)->HandleSendQueue();
}
void Ip6::HandleSendQueue(void)
{
while (mSendQueue.GetHead())
{
Message *message = mSendQueue.GetHead();
mSendQueue.Dequeue(*message);
HandleDatagram(*message, NULL, message->GetInterfaceId(), NULL, false);
}
}
ThreadError Ip6::HandleOptions(Message &message)
{
ThreadError error = kThreadError_None;