mirror of
https://github.com/espressif/openthread.git
synced 2026-08-26 04:09:52 +00:00
Use a send task for handling IPv6::SendMessage requests to reduce stack. (#536)
This commit is contained in:
+19
-1
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user