From 0d4da3a0f9b891779669919d62487d8290b35379 Mon Sep 17 00:00:00 2001 From: Abtin Keshavarzian Date: Fri, 10 Mar 2017 20:21:25 -0800 Subject: [PATCH] `MeshForwarder`: Check if child is marked in message child mask before decrease of `mQueuedIndirectMessageCnt` (#1455) --- src/core/thread/mesh_forwarder.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/core/thread/mesh_forwarder.cpp b/src/core/thread/mesh_forwarder.cpp index e3f149178..0697f1310 100644 --- a/src/core/thread/mesh_forwarder.cpp +++ b/src/core/thread/mesh_forwarder.cpp @@ -1588,6 +1588,7 @@ void MeshForwarder::HandleSentFrame(Mac::Frame &aFrame, ThreadError aError) Mac::Address macDest; Child *child; Neighbor *neighbor; + uint8_t childIndex; mSendBusy = false; @@ -1696,10 +1697,12 @@ void MeshForwarder::HandleSentFrame(Mac::Frame &aFrame, ThreadError aError) child->mIndirectSendInfo.mMessage = NULL; } - mSendMessage->ClearChildMask(mNetif.GetMle().GetChildIndex(*child)); + childIndex = mNetif.GetMle().GetChildIndex(*child); - if ((child->mMode & Mle::ModeTlv::kModeRxOnWhenIdle) == 0) + if (mSendMessage->GetChildMask(childIndex)) { + mSendMessage->ClearChildMask(childIndex); + child->mQueuedIndirectMessageCnt--; otLogDebgMac(GetInstance(), "Sent to child (0x%x), still queued message (%d)", child->mValid.mRloc16, child->mQueuedIndirectMessageCnt);