mirror of
https://github.com/espressif/openthread.git
synced 2026-08-21 01:49:52 +00:00
Fix cleanup of indirect messages when a child is removed. (#1052)
- Allow cleanup even when mSendBusy is true. - Set mSendMessage to NULL to indicate that the message has been freed. - In HandleSentFrame(), simply schedule next transmission if mSendMessage is NULL.
This commit is contained in:
@@ -187,8 +187,6 @@ void MeshForwarder::UpdateIndirectMessages(void)
|
||||
Child *children;
|
||||
uint8_t numChildren;
|
||||
|
||||
VerifyOrExit(mSendBusy == false,);
|
||||
|
||||
children = mMle.GetChildren(&numChildren);
|
||||
|
||||
for (uint8_t i = 0; i < numChildren; i++)
|
||||
@@ -209,6 +207,11 @@ void MeshForwarder::UpdateIndirectMessages(void)
|
||||
|
||||
if (!message->IsChildPending())
|
||||
{
|
||||
if (mSendMessage == message)
|
||||
{
|
||||
mSendMessage = NULL;
|
||||
}
|
||||
|
||||
mSendQueue.Dequeue(*message);
|
||||
message->Free();
|
||||
}
|
||||
@@ -217,9 +220,6 @@ void MeshForwarder::UpdateIndirectMessages(void)
|
||||
child->mQueuedIndirectMessageCnt = 0;
|
||||
ClearSrcMatchEntry(*child);
|
||||
}
|
||||
|
||||
exit:
|
||||
return;
|
||||
}
|
||||
|
||||
void MeshForwarder::ScheduleTransmissionTask()
|
||||
@@ -1255,7 +1255,12 @@ void MeshForwarder::HandleSentFrame(Mac::Frame &aFrame, ThreadError aError)
|
||||
Neighbor *neighbor;
|
||||
|
||||
mSendBusy = false;
|
||||
VerifyOrExit(mSendMessage != NULL, ;);
|
||||
|
||||
if (mSendMessage == NULL)
|
||||
{
|
||||
mScheduleTransmissionTask.Post();
|
||||
ExitNow();
|
||||
}
|
||||
|
||||
aFrame.GetDstAddr(macDest);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user