From 1dd6979758899054d198983049c6b56339deb916 Mon Sep 17 00:00:00 2001 From: Jonathan Hui Date: Mon, 26 Sep 2016 15:13:20 -0700 Subject: [PATCH] Handle outstanding MAC requests when interface is disabled. (#689) --- src/core/mac/mac.cpp | 5 ++--- src/core/thread/mesh_forwarder.cpp | 16 +++++++++------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/core/mac/mac.cpp b/src/core/mac/mac.cpp index 448efa8b8..6c20dfbbd 100644 --- a/src/core/mac/mac.cpp +++ b/src/core/mac/mac.cpp @@ -657,7 +657,7 @@ exit: if (error != kThreadError_None) { - assert(false); + TransmitDoneTask(false, kThreadError_Abort); } } @@ -801,9 +801,8 @@ void Mac::SentFrame(ThreadError aError) switch (aError) { case kThreadError_None: - break; - case kThreadError_ChannelAccessFailure: + case kThreadError_Abort: break; case kThreadError_NoAck: diff --git a/src/core/thread/mesh_forwarder.cpp b/src/core/thread/mesh_forwarder.cpp index 2b3cc8274..bbe1157f1 100644 --- a/src/core/thread/mesh_forwarder.cpp +++ b/src/core/thread/mesh_forwarder.cpp @@ -126,6 +126,7 @@ ThreadError MeshForwarder::Stop() } mEnabled = false; + mSendMessage = NULL; mMac.SetRxOnWhenIdle(false); exit: @@ -811,10 +812,12 @@ ThreadError MeshForwarder::HandleFrameRequest(void *aContext, Mac::Frame &aFrame ThreadError MeshForwarder::HandleFrameRequest(Mac::Frame &aFrame) { + ThreadError error = kThreadError_None; Mac::Address macDest; Child *child = NULL; + + VerifyOrExit(mSendMessage != NULL, error = kThreadError_Abort); mSendBusy = true; - assert(mSendMessage != NULL); switch (mSendMessage->GetType()) { @@ -865,7 +868,8 @@ ThreadError MeshForwarder::HandleFrameRequest(Mac::Frame &aFrame) dump("sent frame", aFrame.GetHeader(), aFrame.GetLength()); #endif - return kThreadError_None; +exit: + return error; } ThreadError MeshForwarder::SendPoll(Message &aMessage, Mac::Frame &aFrame) @@ -1131,11 +1135,7 @@ void MeshForwarder::HandleSentFrame(Mac::Frame &aFrame, ThreadError aError) Neighbor *neighbor; mSendBusy = false; - - if (!mEnabled) - { - ExitNow(); - } + VerifyOrExit(mSendMessage != NULL, ;); mSendMessage->SetOffset(mMessageNextOffset); @@ -1240,6 +1240,7 @@ void MeshForwarder::HandleSentFrame(Mac::Frame &aFrame, ThreadError aError) { mSendQueue.Dequeue(*mSendMessage); mSendMessage->Free(); + mSendMessage = NULL; } mScheduleTransmissionTask.Post(); @@ -1271,6 +1272,7 @@ void MeshForwarder::HandleDiscoverTimer(void) { mSendQueue.Dequeue(*mSendMessage); mSendMessage->Free(); + mSendMessage = NULL; mMac.SetChannel(mRestoreChannel); mScanning = false; mMle.HandleDiscoverComplete();